使用 Javascript 获取特定日期的 epoch

如何使用 Javascript 将 07/26/2010转换为 UNIX 时间戳?

162545 次浏览

看看 http://www.w3schools.com/jsref/jsref_obj_date.asp

有一个函数 UTC()返回 unix 纪元的毫秒。

您可以创建一个 Date对象,并对其调用 getTime:

new Date(2010, 6, 26).getTime() / 1000
new Date("2016-3-17").valueOf()

将会回到一个漫长的时代

还可以使用 Date.now ()函数。

Number(new Date(2010, 6, 26))

工作原理和上面的一样。如果你需要几秒钟,不要忘记使用 / 1000

有些答案没有解释 JavaScriptDate 对象时区变化的副作用。所以如果你担心这个问题,你应该考虑一下这个答案。

方法1: 机器的时区依赖

默认情况下,JavaScript 根据计算机的时区返回 Date,因此 getTime()结果因计算机而异。您可以运行以下命令检查这种行为:

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

这不是一个问题,如果你真的想要的时间从纪元以来考虑你的时区。因此,如果您想获得当前 Date 的时间,甚至基于 计算机的时区的指定 Date 的时间,您可以继续使用此方法。

// 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)

方法2: 机器的时区独立

然而,如果你想摆脱时区的变化,获得自世纪以来 以协调世界时为单位的指定日期的时间(也就是说,与时区无关) ,你需要使用 Date.UTC方法或将日期从你的时区移动到 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

因此,使用这种方法(或者减去差值) ,结果应该是:

// 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)

我的意思是,除非你知道你在做什么(见上面的说明) ,你应该更喜欢 方法2,因为它是机器独立的。


结束语

虽然这个答案中的建议,而且由于 Date.UTC没有指定的日期/时间是不起作用的,您可能倾向于使用替代方法,并执行以下操作:

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" (?)

这没有任何意义,它可能是 (您正在修改日期)。注意不要这样做。如果您希望从当前日期 还有时间获得自新纪元以来的时间,那么使用 方法1很可能是可以的。

方法解析日期的字符串表示形式,并返回自 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

更多信息请访问: Date. parse ()