Jak przekonwertować 07/26/2010
na znacznik czasu UNIX przy użyciu JavaScript?
Jak przekonwertować 07/26/2010
na znacznik czasu UNIX przy użyciu JavaScript?
Odpowiedzi:
new Date("2010-7-26")
nie będzie analizować w przeglądarce Internet Explorer. Konstruktor Date opiera się na metodzie Date.parse () , gdy przekazywany jest ciąg znaków, co jest zależne od implementacji w 3.edycji ECMA-262 iw rezultacie notorycznie nieelastyczne w IE.
new Date("2016-3-17").valueOf()
powróci długa epoka
Spójrz na http://www.w3schools.com/jsref/jsref_obj_date.asp
Istnieje funkcja, UTC()
która zwraca milisekundy z epoki unixowej.
Niektóre odpowiedzi nie wyjaśniają skutków ubocznych różnic w strefie czasowej dla obiektu Date JavaScript. Więc powinieneś rozważyć tę odpowiedź, jeśli jest to dla ciebie problemem.
Metoda 1: Zależna od strefy czasowej komputera
Domyślnie JavaScript zwraca datę z uwzględnieniem strefy czasowej komputera, więc getTime()
wynik różni się w zależności od komputera. Możesz sprawdzić to zachowanie, uruchamiając:
new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
// Since 1970-01-01 is Epoch, you may expect ZERO
// but in fact the result varies based on computer's timezone
Nie stanowi to problemu, jeśli naprawdę chcesz określić czas od Epoki, biorąc pod uwagę twoją strefę czasową. Więc jeśli chcesz uzyskać czas od Epoki dla bieżącej Daty lub nawet określonej Daty w oparciu o strefę czasową komputera , możesz nadal korzystać z tej metody.
// Seconds since Epoch (Unix timestamp format)
new Date().getTime() / 1000 // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000 // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds
// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)
new Date().getTime() // local Date/Time since Epoch in milliseconds
new Date(2020, 0, 2).getTime() // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds
// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)
Metoda 2: niezależna od strefy czasowej komputera
Jeśli jednak chcesz uzyskać dostęp do zmian w strefie czasowej i uzyskać czas od Epoki dla określonej Daty w UTC (czyli niezależnie od strefy czasowej), musisz użyć Date.UTC
metody lub przesunąć datę ze swojej strefy czasowej na UTC:
Date.UTC(1970, 0, 1)
// should be ZERO in any computer, since it is ZERO the difference from Epoch
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime() // difference in milliseconds between your timezone and UTC
(new Date(1970, 0, 1).getTime() - timezone_diff)
// should be ZERO in any computer, since it is ZERO the difference from Epoch
Tak więc, używając tej metody (lub alternatywnie, odejmując różnicę), wynik powinien być:
// Seconds since Epoch (Unix timestamp format)
Date.UTC(2020, 0, 1) / 1000 // time since Epoch to 2020-01-01 00:00 UTC in seconds
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date(2020, 0, 1).getTime() - timezone_diff) / 1000 // time since Epoch to 2020-01-01 00:00 UTC in seconds
(new Date(2020, 11, 1).getTime() - timezone_diff) / 1000 // time since Epoch to 2020-12-01 00:00 UTC in seconds
// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)
Date.UTC(2020, 0, 2) // time since Epoch to 2020-01-02 00:00 UTC in milliseconds
// Alternatively (if, for some reason, you do not want Date.UTC)
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date(2020, 0, 2).getTime() - timezone_diff) // time since Epoch to 2020-01-02 00:00 UTC in milliseconds
// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)
IMO, chyba że wiesz, co robisz (patrz uwaga powyżej), powinieneś preferować metodę 2 , ponieważ jest niezależna od komputera.
Uwaga końcowa
Chociaż zalecenia w tej odpowiedzi, a ponieważ Date.UTC
nie działają bez określonej daty / godziny, możesz być skłonny do zastosowania alternatywnego podejścia i zrobienia czegoś takiego:
const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff) // <-- !!! new Date() without arguments
// means "local Date/Time subtracted by timezone since Epoch" (?)
Nie ma to żadnego sensu i prawdopodobnie jest NIEPRAWIDŁOWE (modyfikujesz datę). Pamiętaj, aby tego nie robić. Jeśli chcesz uzyskać czas od epoki od bieżącej daty ORAZ CZASU , najprawdopodobniej jesteś w porządku, używając metody 1 .
Date.parse()
metoda analizuje ciąg reprezentujący datę i zwraca liczbę milisekund, które upłynęły od January 1, 1970, 00:00:00 UTC
.
const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');
console.log(unixTimeZero);
// expected output: 0
console.log(javaScriptRelease);
// expected output: 818035920000
Dowiedz się więcej na: Date.parse ()
Number(new Date(2010, 6, 26))
Działa tak samo, jak powyższe. Jeśli potrzebujesz sekund, nie zapomnij/ 1000