Come convertire la data in data e ora?


165

Voglio convertire la data in data e ora, il mio input è 26-02-2012. ero solito

new Date(myDate).getTime();

Dice NaN .. Qualcuno può dire come convertire questo?



potresti dare un'occhiata alla libreria date.js
rsbarro

1
Hai usato Date(myDate).getTime()(quello che hai contrassegnato come codice) o la parola "nuovo" prima di esso significava far parte del codice? Maggiore è il tuo impegno, migliori saranno le risposte che otterrai.
TJ Crowder,

@rsbarro: Tranne il fatto che non sembra essere più mantenuto (e ci sono bug eccezionali). MomentJS sembra abbastanza buono, però.
TJ Crowder,

@TJCrowder Ho usato date.js e ha funzionato per quello per cui ne avevo bisogno, ma hai ragione non è stato attivamente lavorato su da un po 'di tempo. Controllerò momentjs. Grazie!
rsbarro,

Risposte:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Aggiornare:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (testato su Chrome, FF, Opera, IE e Safari).


Sfortunatamente, questo non funziona in Safari5, poiché ritorna NaN. In Safari devi usare l'altro possibile costruttore new Date(year, month, day);, per quanto riguarda questo esempio:new Date(myDate[2], myDate[1], myDate[0]);
inserisci nomeutente

13
Invece di convertire la stringa di data dal formato "europeo" a "americano", è meglio convertirla nel formato ISO 8601 (YYYY-MM-DD ), che è garantito per essere compreso Date(), ed è, in generale, il formato più interoperabile per le stringhe di data.
Walter Tross,

3
Nota: new Date(newDate).getTime()produrrà un timestamp con risoluzione in millisecondi.
h7r

3
Per secondi usare: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

Prova questa funzione, utilizza il metodo Date.parse () e non richiede alcuna logica personalizzata:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));

25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();

24

questo codice refactored lo farà

let toTimestamp = strDate => Date.parse(strDate)

funziona su tutti i browser moderni tranne ie8-


10

Ci sono due problemi qui. Innanzitutto, puoi chiamare getTime solo su un'istanza della data. Devi racchiudere la nuova data tra parentesi o assegnarla alla variabile.

In secondo luogo, è necessario passargli una stringa in un formato appropriato.

Esempio funzionante:

(new Date("2012-02-26")).getTime();

1
Non è necessario racchiudere la data istantanea tra parentesi. È richiesto solo un formato stringa appropriato.
Maswerdna,

5

Devi solo invertire la cifra della data e cambiare -con ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

Nel tuo caso:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

Le impostazioni internazionali di PS UK non contano qui.


Anche il formato della data non è valido e non funziona in modo affidabile tra browser e cross-locale (ad esempio, non funziona per me in Chrome con le impostazioni internazionali del Regno Unito). Se hai intenzione di suggerire un formato, suggerisci uno che è effettivamente documentato per funzionare.
TJ Crowder,

Ottengo l'esempio da developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Ho appena dimenticato di mettere via la corda. Ora funziona.
antonjs,

2
Va bene, almeno ora il codice sopra non utilizza un formato data non valido - sta solo dando la data sbagliata, per due motivi separati. Sopra hai definito la data del 2 marzo 2014 (hai incasinato l'ordine dei campi). E se i campi fossero nell'ordine giusto, definiresti la data del 26 marzo 2012 (i valori del mese iniziano da zero). Ma poiché l'OP ha una stringa, non una serie di numeri, non è poi così utile anche se hai affrontato questi problemi.
TJ Crowder,

@TJ Crowder grazie per i tuoi suggerimenti. Ho corretto il codice come hai detto convertendo la stringa in un numero. Merci.
antonjs,

2
Il primo esempio di codice è ancora errato e l'utilizzo Numbersu stringhe che iniziano con a 0è problematico su alcuni motori: utilizzare parseInte specificare una radice.
TJ Crowder,

5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}

4

Per convertire la data (ISO) in timestamp Unix , ho finito con un timestamp di 3 caratteri più lungo del necessario, quindi il mio anno è stato di circa 50k ...

Ho dovuto dividerlo per 1000: new Date('2012-02-26').getTime() / 1000


3

Per coloro che desiderano avere un timestamp leggibile in formato di, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Esempio di utilizzo: un'estensione del file di backup. /my/path/my.file.js.20190220


3

Nel caso in cui sei venuto qui in cerca del timestamp corrente

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

La stringa non è in un formato che l' Dateoggetto è specificato per gestire . Dovrai analizzarlo da solo, utilizzare una libreria di analisi della data come MomentJS o precedente (e non attualmente mantenuta, per quanto posso dire) DateJS , o massaggiarlo nel formato corretto (ad es. 2012-02-29) Prima di chiedereDate di analizzarlo .

Perché stai ricevendo NaN: quando chiedi new Date(...)di gestire una stringa non valida, restituisce un Dateoggetto impostato su una data non valida ( new Date("29-02-2012").toString()ritorna "Invalid date"). Richiamare getTime()un oggetto data in questo stato restituisce NaN.


@benvds: fantastico, grazie. Anche se trovo il commento "Inoltre, non è distruttivo per il DOM" un po 'strano ... Mi aspetto che intendessero dire che non cambia l' Dateoggetto (che non ha nulla a che fare con il DOM).
TJ Crowder,

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

Le risposte sono state fornite da altri sviluppatori, ma a modo mio, puoi farlo al volo senza creare alcuna funzione definita dall'utente come segue:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.