Konwertuj normalną datę na unixowy znacznik czasu

106

Jak mogę przekonwertować normalną datę 2012.08.10na uniksowy znacznik czasu w javascript?

Fiddle: http://jsfiddle.net/J2pWj/




Widziałem tutaj wiele postów, które konwertują to na PHP, Ruby itp ... Ale muszę to zrobić w JS.

Stan
źródło
1
możliwy duplikat konwersji daty na znacznik czasu w javascript?
Martin York
1
Czy próbowałeś newDate.getTime () / 1000?
Gareth Parker
@LokiAstari tak, przepraszam. Szukałem, ale tego nie znalazłem.
Stan
1
Może czegoś mi brakuje, ale unix timestampjest to fundamentalne dla całej inżynierii i informatyki. Szkoda, że ​​nie ma wbudowanej wygodnej metody. Obecnie używamMath.floor((+new Date()) / 1000);
Mars Robertson

Odpowiedzi:

213
new Date('2012.08.10').getTime() / 1000

Sprawdź dokumentację JavaScript Date .

fguillen
źródło
1
Dzięki za stronę dokumentacji Zrobiłem co chciałem.
Stan
32
Math.floor it or its not a UNIX timestamp (will have a decimal)
BT
@ fguillen, Mooseman, uruchamiam i sprawdzam ten kod. Kiedy przekonwertuję do tej pory znacznik czasu unixa, daje mi to 2012.08.09 zamiast 2012.08.10. Dlaczego..?
WP Learner
@ user2584538, zobacz moją odpowiedź poniżej. Musisz usunąć cyfry po przecinku.
Vinchi
1
Czas @Mentor UNIX jest mierzony w sekundach, a nie w milisekundach
Nicu Surdu,
60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Ważne jest, aby dodać toFixed(0)kropkę, aby usunąć wszelkie ułamki dziesiętne podczas dzielenia przez 1000 w celu konwersji z milisekund na sekundy.

.getTime()Zwraca znacznik czasu w milisekundach, ale prawdziwe znaczników czasu Uniksa są zawsze w ciągu kilku sekund.

theVinchi
źródło
5
uważaj tylko, że zwraca to ciąg znaków, a nie liczbę.
Capaj
3
Dobra uwaga, zmieniono odpowiedź na zawijanie za pomocą parseInt (), aby przekonwertować z powrotem na liczbę całkowitą.
theVinchi
11

Powinieneś sprawdzić interfejs API moment.js, jest bardzo łatwy w użyciu i ma wiele wbudowanych funkcji.

Myślę, że dla twojego problemu możesz użyć czegoś takiego:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();
Mahus
źródło
10

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch

KARTHIKEYAN.A
źródło
5

Możesz po prostu użyć jednoargumentowego operatora +

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - spójrz pod Daty.

hybryda9
źródło
2
Chcę tylko dodać tutaj dwa komentarze: jednoargumentowy operator add + nie jest potrzebny, ponieważ /jest już operatorem matematycznym. Ponadto, toFixedzwraca ciąg znaków, a nie liczba, w przypadku, gdy typ jest ważne ..
Laurens
3

Możesz użyć Date.parse () , ale formaty wejściowe, które akceptuje, są zależne od implementacji. Jeśli jednak możesz przekonwertować datę na format ISO (RRRR-MM-DD) , większość implementacji powinna to zrozumieć.

Zobacz Dlaczego Date.parse daje nieprawidłowe wyniki? .

Barmar
źródło
3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

W tym przypadku ważne jest, aby zwracać tylko liczbę całkowitą (więc zwykłe dzielenie nie wystarczy), a także zwracać tylko faktycznie upływające sekundy (dlatego ten kod używa, Math.floor()a nie Math.round()).

dumitru
źródło
2

Możesz to zrobić za pomocą metody Date.parse ().

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") output-> 1456959600000

Date.parse ("2015-12-12") output-> 1449878400000

Nazar
źródło
1
Jak ta odpowiedź różni się od tej udzielonej przez Barmara 6 lat temu?
Koziorożec
1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;
OptimusCrime
źródło
1

Po porównaniu znacznika czasu z tym z PHP, żadna z powyższych nie wydaje się poprawna dla mojej strefy czasowej. Poniższy kod dał mi taki sam wynik jak PHP, który jest najważniejszy dla projektu, który robię.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Używam tego na NodeJS i mamy strefę czasową „Australia / Sydney”. Musiałem więc dodać to do pliku .env:

TZ = 'Australia/Sydney'

Powyższe jest równoważne z:

process.env.TZ = 'Australia/Sydney'
Damodar Bashyal
źródło
0

przekonwertować znacznik czasu na znacznik czasu unix.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

aby uzyskać znacznik czasu po konwersji const TimeStamp = new Date(date*1000).getTime(); //1513787412000

Rajat
źródło