使用Javascript获取特定日期的纪元

时间:2010-07-29 22:17:26

标签: javascript javascript-events javascript-framework

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

7 个答案:

答案 0 :(得分:137)

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

new Date(2010, 6, 26).getTime() / 1000

答案 1 :(得分:23)

new Date("2016-3-17").valueOf() 

会返回一个很长的纪元

答案 2 :(得分:6)

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

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

答案 3 :(得分:2)

一些答案​​不能解释JavaScript Date对象时区变化的副作用。因此,如果您对此感到担心,则应考虑此答案。

方法1:与计算机时区有关

默认情况下,JavaScript根据机器的时区返回日期,因此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开始考虑自己的时区,那么这不是问题。因此,如果您想获得自当前时间到当前日期甚至是基于计算机时区的指定日期的时间,您都可以继续使用此方法。

// 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:与机器的时区无关

但是,如果您想驾驭时区的变化并自大纪元开始以 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,除非您知道自己在做什么(请参阅上面的注释),否则应该首选方法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" (?)

这没有任何意义,可能是错误(您正在修改日期)。请注意不要这样做。如果您想从当前日期 AND TIME 开始获取自大纪元以来的时间,可以使用方法1

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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