117

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

4

7 回答 7

219

您可以创建一个Date对象,然后调用getTime它:

new Date(2010, 6, 26).getTime() / 1000
于 2010-07-29T22:19:42.627 回答
53
new Date("2016-3-17").valueOf() 

将返回一个漫长的时代

于 2016-03-17T23:08:25.537 回答
7

一些答案没有解释 JavaScript Date 对象时区变化的副作用。因此,如果这对您来说是一个问题,您应该考虑这个答案。

方法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

如果您真的想要考虑您的时区的 Epoch 以来的时间,这不是问题。因此,如果您想从 Epoch 获取当前 Date 甚至基于计算机 timezone的指定 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:机器的时区独立

但是,如果您想了解时区的变化并获得自 Epoch 以来指定日期的 UTC 时间(即与时区无关),您需要使用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)

IMO,除非您知道自己在做什么(请参见上面的注释),否则您应该更喜欢Method 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" (?)

这没有任何意义,而且可能是错误的(您正在修改日期)。请注意不要这样做。如果您想从当前日期和时间获取自 Epoch 以来的时间,您很可能可以使用Method 1

于 2020-04-29T15:47:26.247 回答
5

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

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

于 2010-07-29T22:19:34.307 回答
4

Date.parse()方法解析日期的字符串表示,并返回从 开始的毫秒数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()

于 2020-05-08T12:26:24.407 回答
3

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

于 2018-05-18T22:57:24.803 回答
0
Number(new Date(2010, 6, 26))

工作方式与上述相同。如果您需要几秒钟,请不要忘记/ 1000

于 2018-10-24T19:28:48.910 回答