Analisar string DateTime em JavaScript

94

Alguém sabe como analisar string de data no formato necessário dd.mm.yyyy?

Azat
fonte
Você deseja criar um novo objeto de data a partir de uma string nesse formato?
Kieran Hall,

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]);
Jonathan Fingland
fonte
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/

Mecalito
fonte
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
9

Usamos este código para verificar se a string é uma data válida

var dt = new Date(txtDate.value)
if (isNaN(dt))
Adriaan Stander
fonte
o formato fornecido não corresponde ao formato exigido por developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (e, portanto, esse construtor Date não será suficiente)
Jonathan Fingland
Isso não testa datas válidas, apenas testa se o construtor Date pode criar uma data válida a partir da entrada. Os dois não são a mesma coisa.
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");
colmeia
fonte
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 );
user3444722
fonte
2

Use o objeto Date:

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

Dê: 917902800000

HotJard
fonte
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;
}
Martin Staufcik
fonte
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)
Bachas
fonte
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