2012-03-26 25 views
87

Chcę przekonwertować datę na sygnaturę czasową, moje wejście to 26-02-2012. Mówi NaN .. Czy ktoś może powiedzieć, jak to konwertować?przekonwertować datę na znacznik czasu w javascript?

+0

możliwy duplikat http://stackoverflow.com/questions/9343971/timestamp-conversion-javascript –

+0

możesz zajrzeć do biblioteki date.js: http://www.datejs.com/ – rsbarro

+1

Czy używałeś 'Date (myDate) .getTime()' (co zaznaczyłeś jako kod), czy też słowo "new" przed oznaczeniem było częścią kodu? Im więcej wysiłku włożysz, tym lepsze uzyskasz odpowiedzi. –

Odpowiedz

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 

Aktualizacja:

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 (Testowane na Chrome, FF, Opera, IE i Safari).

+0

Niestety, nie działa to w Safari5, ponieważ zwraca 'NaN'. W Safari musisz użyć innego możliwego konstruktora 'nowa data (rok, miesiąc, dzień); w odniesieniu do tego przykładu:' nowa data (myDate [2], myDate [1], myDate [0]); ' – insertusernamehere

+4

Sprawdź aktualizacja. –

+6

Zamiast konwertować ciąg daty z formatu "europejskiego" na "amerykański", lepiej jest przekonwertować ten format na format ISO 8601 ("RRRR-MM-DD"), co gwarantuje, że jest zrozumiałe przez "Date()", oraz jest, ogólnie biorąc, najbardziej interoperacyjnym formatem ciągów daty. –

2

Twój ciąg nie jest w formacie, który jest obiektem Datespecified to handle. Musisz przetworzyć to samemu, użyj biblioteki parsującej daty, takiej jak MomentJS lub starszej (i nie jest w tej chwili utrzymywanej, o ile mogę to stwierdzić) DateJS, lub wymaż ją w odpowiednim formacie (np. 2012-02-29), zanim zaprosisz Date do przeanalizuj to.

Dlaczego jesteś coraz NaN: Kiedy pytasz new Date(...) obsługiwać nieprawidłowy ciąg, zwraca Date przedmiot, który jest ustawiony na nieprawidłowej daty (new Date("29-02-2012").toString() powraca "Invalid date"). Wywołanie getTime() obiektu daty w tym stanie zwraca NaN.

+0

Kolejny dla UTC: http://arshaw.com/xdate/ – benvds

+0

@benvds: Cool, thanks. Chociaż znajduję komentarz * "Co więcej, jest nieszkodliwy dla DOM" * trochę dziwny ... Spodziewam się, że chodziło o to, że nie zmienia on obiektu 'Date' (który nie ma nic wspólnego z DOM). –

3

Trzeba tylko, aby odwrócić swoją datę cyfrę i zmienić - z ,:

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

W twoim przypadku:

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

PS: Lokalizacja w Wielkiej Brytanii nie ma tutaj znaczenia.

+0

Ten format daty jest również nieprawidłowy i nie będzie działać niezawodnie w różnych przeglądarkach i w różnych lokalizacjach (nie jest to na przykład dla mnie w Chrome z ustawieniami regionalnymi w Wielkiej Brytanii). Jeśli masz zamiar zaproponować format, zasugeruj taki, który jest rzeczywiście udokumentowany. –

+0

Otrzymuję przykład z https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date. Po prostu zapomniałem odłożyć sznur. Teraz działa. – antonjs

+2

OK, przynajmniej teraz powyższy kod nie używa nieprawidłowego formatu daty - podaje tylko złą datę z dwóch osobnych powodów. Powyżej zdefiniowałeś datę 2 marca 2014 r. (Masz zablokowane zamówienie w terenie). A jeśli pola były we właściwej kolejności, definiowałbyś datę ** Marzec ** 26th, 2012 (wartości miesięcy zaczynają się od zera). Ale ponieważ OP ma ciąg, a nie serię liczb, nie jest to aż tak użyteczne, nawet jeśli rozwiązałeś te problemy. –

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

długa, ale świetnie działająca odpowiedź –

20

Spróbuj tej funkcji, wykorzystuje metodę Date.parse() i nie wymaga żadnej niestandardowej logiki:

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

To zdecydowanie najlepsza odpowiedź, dziękuję! – 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

Dobra robota, @Evgeniy! Dzięki za udostępnienie! – Ricalsin

4

ten kod refactored zrobi

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

działa to we wszystkich nowoczesnych przeglądarkach z wyjątkiem ie8 -

+0

To jest prawdziwa odpowiedź. Reszta to żart. – Moss

Powiązane problemy