Analisar string DateTime em JavaScript


Respostas:


140

Vejo:

Código:

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

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

mmm, mas como verificar se strDate tem um valor inválido como "30.30.2000"?
Dr. No

2
@ user674887, você pode comparar os valores após a análise. por exemplo, dateParts [1] -1 == date.getMonth ()
Jonathan Fingland

Se você tiver a data TIME assim: "2014-05-20T16: 43: 56.71-06: 00" var partesFecha = solicitud.CreatedDate.split ("T") [0] .split ("-"); var data criada = nova Data (partesFecha [0], (partesFecha [1] - 1), partesFecha [2]); A primeira extração data antes de T e, posteriormente, divida o ano, mês e dia.
RolandoCC de

não acredito que você tem que usar uma divisão para obter o formato de data esperado em javascript
Claudiu Creanga

Alguém mais achou estranho que o artigo de referência do Mozilla sobre o próprio objeto Date diga "Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."?
NanoWizard

51

Se você estiver usando jQuery UI, pode formatar qualquer data com:

<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 Não vejo como estando totalmente fora do escopo, JavaScript e JQuery são uma combinação comum.
djna

Uma resposta não deve depender de uma biblioteca que não está marcada ou mencionada no OP. Usar jQuery como uma biblioteca de data é um exagero enorme quando uma função de 3 linhas pode fazer o mesmo trabalho.
RobG


6

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

Se você usa moment.js, pode usar o modo "string" + "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
Na maioria dos casos, o MomentJS é um exagero, já que usar JavaScript puro requer apenas centenas de bytes, enquanto o MomentJS tem 12,4 kb compactado com gzip. Conveniente para desenvolvedores, mas torna o site mais lento. Não vale a pena.
Raptor

3

Tenho sido usado para seguir o código no IE. (Compatível com IE8)

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


2

Use o objeto Date:

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

Dê: 917902800000


16
new Date(Date.parse('02.02.1999'))
Duque de

+1 para Duke comentários sobre new Date(Date.parse('02.02.1999'))Javascript
Jack

Retorna NaN em pelo menos dois navegadores atuais. Consulte Por que Date.parse fornece resultados incorretos?
RobG

@ Duke— new Date(Date.parse('02.02.1999'))produzirá resultados idênticos a new Date('02.02.1999'), incluindo Data inválida em alguns navegadores. Usar o analisador integrado é sem dúvida a pior maneira de analisar um carimbo de data / hora.
RobG de

2

Esta função também controla a data inválida de 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

você pode formatar a data apenas fazendo este tipo de código. Em 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)

Você deve usar javascript e não jquery, pois não há tag jquery
Sagar

feliz ... o significado é apenas entender o senário
Bachas

Bem. Não acho que seu exemplo seja diferente daquele dado por Martin Staufcik. Na verdade, sua resposta tem lógica adicional para lidar com datas inválidas.
Sagar,

Martin Staufcik lida com essas condições que geralmente não ocorrem. você pode me dar qualquer calendário que possa fornecer invalidates.why deveríamos escrever um código tão longo quando podemos lidar com isso de forma resumida. Seria muito melhor se Martin Staufcik também desse para lidar com data com tempo para lidar.
Bachas de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.