Analizar la cadena DateTime en JavaScript


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]);

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/


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))

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");

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 );


2

Usar objeto de fecha:

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

Dar: 917902800000


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;
}

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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.