Analizar la cadena DateTime en JavaScript

93

¿Alguien sabe cómo analizar la cadena de fecha en el formato requerido dd.mm.yyyy?

Azat
fuente
¿Quieres crear un nuevo objeto de fecha a partir de una cadena en ese formato?
Kieran Hall

Respuestas:

140

Ver:

Código:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
Jonathan Fingland
fuente
8
Ups ... un pequeño boo-boo - el constructor de fecha en realidad se ve así: nueva Fecha (año, mes, fecha [, hora, minuto, segundo, milisegundo]) por lo que necesita alterar el orden de dateParts dentro del constructor.
Salman A
6
Otro boo-boo. El constructor de fechas de JavaScript es extraño en cómo maneja los meses. Considera que 0 significa enero, 1 significa febrero, etc. La línea del código anterior debería verse así: var date = new Date (dateParts [2], dateParts [1] - 1, dateParts [0]);
Elias Zamaria
1
@ mikez302, tienes razón. la referencia de MDC vinculada también lo señala. código corregido
Jonathan Fingland
mmm, pero ¿cómo comprobar que strDate tiene un valor no válido como "30.30.2000"?
Dr. No
2
@ user674887, puede comparar los valores después del análisis. Por ejemplo, dateParts [1] -1 == date.getMonth ()
Jonathan Fingland
51

Si está utilizando jQuery UI, puede formatear cualquier fecha con:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/

Mecalito
fuente
21
+1 No lo veo totalmente fuera de alcance, JavaScript y JQuery son una combinación común.
Djna
Una respuesta no debe depender de una biblioteca que no esté etiquetada o mencionada en el OP. Usar jQuery como una biblioteca de fechas es una exageración enorme cuando una función de 3 líneas puede hacer el mismo trabajo.
RobG
9

Usamos este código para verificar si la cadena es una fecha válida

var dt = new Date(txtDate.value)
if (isNaN(dt))
Adriaan Stander
fuente
el formato dado no coincide con el formato requerido por developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (y por lo tanto, ese constructor de fecha no será suficiente)
Jonathan Fingland
Eso no prueba fechas válidas en absoluto, solo prueba si el constructor Date puede hacer una fecha válida a partir de la entrada. Los dos no son lo mismo.
RobG
6

referencias: http://momentjs.com/docs/#/parsing/string/

Si usa moment.js, puede usar el modo "cadena" + "formato"

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

ex:

moment("12-25-1995", "MM-DD-YYYY");
colmena
fuente
2
Para la mayoría de los casos, MomentJS es una exageración, ya que el uso de JavaScript puro solo requiere cientos de bytes, mientras que MomentJS tiene 12,4 kb en gzip. Conveniente para los desarrolladores, pero ralentiza el sitio web. No vale la pena.
Raptor
3

Me han utilizado siguiendo el código en IE. (Compatible con IE8)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );
usuario3444722
fuente
2

Usar objeto de fecha:

var time = Date.parse('02.02.1999');
document.writeln(time);

Dar: 917902800000

HotJard
fuente
16
new Date(Date.parse('02.02.1999'))
Duke
+1 para comentarios de Duke sobre new Date(Date.parse('02.02.1999'))Javascript
Jack
Devuelve NaN en al menos dos navegadores actuales. Consulte ¿Por qué Date.parse da resultados incorrectos?
RobG
@ Duke: new Date(Date.parse('02.02.1999'))producirá resultados idénticos a new Date('02.02.1999'), incluida la fecha no válida en algunos navegadores. El uso del analizador integrado es posiblemente la peor forma de analizar una marca de tiempo.
RobG
2

Esta función también maneja la fecha no válida 29.2.2001.

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}
Martín Staufcik
fuente
0

puede formatear la fecha simplemente haciendo este tipo de código. En javascript.

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)
Bachas
fuente
Se supone que debes usar javascript, no jquery, ya que no hay etiqueta jquery
Sagar
feliz ... el significado es simplemente entender al senario
Bachas
Bien. No creo que su ejemplo sea diferente al de Martin Staufcik. De hecho, su respuesta tiene lógica adicional para manejar fechas inválidas.
Sagar
Martin Staufcik maneja esas condiciones que no ocurren generalmente. ¿Puede darme algún calendario que pueda dar invalidates? ¿Por qué deberíamos escribir un código tan largo cuando podemos manejarlo de manera corta? Me gustaría mucho mejor si Martin Staufcik también diera para manejar la fecha con el tiempo para manejar.
Bachas