2012-03-26 21 views
87

Voglio convertire la data in data e ora, il mio input è 26-02-2012. Ho usatoconvertire la data in data e ora in javascript?

new Date(myDate).getTime(); 

Si dice NaN .. Qualcuno può dire come convertire questo?

+0

possibile duplicato di http://stackoverflow.com/questions/9343971/timestamp-conversion-javascript –

+0

si consiglia di dare un'occhiata alla libreria date.js: http://www.datejs.com/ – rsbarro

+1

Hai usato 'Date (myDate) .getTime()' (cosa hai marcato come codice), o la parola "new" prima voleva dire far parte del codice? Maggiore è il tuo impegno, migliori saranno le risposte che otterrai. –

risposta

117
var myDate="26-02-2012"; 
myDate=myDate.split("-"); 
var newDate=myDate[1]+","+myDate[0]+","+myDate[2]; 
alert(new Date(newDate).getTime());​ //will alert 1330192800000 

Aggiornamento:

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

DEMO (Testato in Chrome, FF, Opera, Internet Explorer e Safari).

+0

Sfortunatamente, questo non funziona in Safari5, poiché restituisce 'NaN'. In Safari devi usare l'altra possibile 'nuova data costruttore (anno, mese, giorno);', riguardo a questo esempio: 'nuova Data (myDate [2], myDate [1], myDate [0]);' – insertusernamehere

+4

Check l'aggiornamento. –

+6

Invece di convertire la stringa della data da "Europeo" a "Americano", è meglio convertirlo in formato ISO 8601 ('AAAA-MM-GG'), che è garantito che sia compreso da' Date() ', e è, in generale, il formato più interoperabile per le stringhe di data. –

2

La stringa non è in un formato che l'oggetto Date è specified to handle. Dovrai analizzarlo da solo, usare una libreria di analisi della data come MomentJS o la più vecchia (e attualmente non mantenuta, per quanto posso dire) DateJS, o massaggiarla nel formato corretto (ad esempio, 2012-02-29) prima di chiedere Date a analizzalo

Perché stai ricevendo NaN: Quando si chiede new Date(...) per gestire una stringa non valida, esso restituisce un oggetto Date che è impostato per una data non valida (new Date("29-02-2012").toString() rendimenti "Invalid date"). Chiamando getTime() su un oggetto data in questo stato restituisce NaN.

+0

Un altro per UTC: http://arshaw.com/xdate/ – benvds

+0

@benvds: Cool, grazie. Anche se trovo il commento * "Inoltre, non è distruttivo per il DOM" * un po 'strano ... Mi aspetto che volessero dire che non cambia l'oggetto 'Date' (che non ha nulla a che fare con il DOM). –

3

è necessario solo per invertire la data di cifre 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(); 

P.S. Le impostazioni locali del Regno Unito non contano qui.

+0

Anche questo formato di data non è valido e non funzionerà in modo affidabile tra browser e impostazioni internazionali (ad esempio, non è disponibile per me in Chrome con le impostazioni locali del Regno Unito). Se hai intenzione di suggerire un formato, proponi uno che sia effettivamente documentato per funzionare. –

+0

Prendo l'esempio da https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date. Ho appena dimenticato di mettere via la corda. Ora funziona. – antonjs

+2

Ok, almeno ora il codice sopra non sta usando un formato di data non valido - sta solo dando la data sbagliata, per due ragioni separate. Sopra hai definito la data 2 marzo 2014 (hai l'ordine sul campo incasinato). E se i campi fossero nel giusto ordine, dovresti definire la data ** Marzo ** 26th, 2012 (i valori del mese iniziano da zero). Ma poiché l'OP ha una stringa, non una serie di numeri, non è tutto ciò che è utile anche se hai affrontato questi problemi. –

20
var dtstr = "26-02-2012"; 
new Date(dtstr.split("-").reverse().join("-")).getTime(); 
4
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()))); 
} 
+0

lunga ma ottima risposta operativa –

20

Provate questa funzione, si 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')); 
+0

Questa è di gran lunga la migliore risposta, grazie! – gyo

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

Bel lavoro, @Evgeniy! Grazie per la condivisione! – Ricalsin

4

questo codice refactoring lo farà

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

funziona su tutti i browser moderni ad eccezione di ie8 -

+0

Questa è la vera risposta. Il resto è uno scherzo. – Moss