Node.js 将日期字符串转换为 unix 时间戳

Node.js converting date string to unix timestamp

我正在尝试将日期字符串转换为 Node.js 中的 unix 时间戳。

我下面的代码在我的客户端上运行完美,但是当我在我的服务器上运行它时,我得到一个错误:

(node:19260) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: input.substring is not a function

我的代码:

function dateParser(input) {
    // function is passed a date and parses it to create a unix timestamp

    // removing the '.000' from input
    let finalDate = input.substring(0, input.length - 4);
    return new Date(finalDate.split(' ').join('T')).getTime();
}

我的输入示例是 2017-09-15 00:00:00.000

那么,为什么上面的方法在我的客户端上有效,但在 Node 中却无效,我该如何复制 Node 中的功能?

根据输入的 DateTime 字符串创建日期对象,然后使用 getTime() 并将结果除以 1000 以获得 UNIX 时间戳。

var unixTimestamp = Math.floor(new Date("2017-09-15 00:00:00.000").getTime()/1000);
console.log(unixTimestamp);

我建议使用 momentjs 来处理日期。使用 momentjs 你可以这样做:

moment().unix(); // Gives UNIX timestamp

如果您已经有一个日期并且想要获取相对于该日期的 UNIX 时间戳,您可以这样做:

moment("2017-09-15 00:00:00.000").unix(); // I have passed the date that will be your input 
// Gives out 1505413800

使用 momentjs 处理 date/time 时效率很高。

Unix 时间戳是从特定日期算起的秒数。 Javascript 函数 getTime() returns 从同一特定日期到您指定日期的毫秒数。

因此,如果您将函数的结果除以数字 1000,您将获得 Unix 时间戳并将从毫秒转换为秒。不要忘记忽略小数位。

您收到的错误消息是因为输入的值不是字符串。

如果系统时区未设置为 UTC,则 2 个选项的结果略有不同

选项 1 - 忽略系统时区

console.log(Math.floor(new Date("2020-01-01").getTime()/1000));

> 1577836800

选项 2 ("moment.js") - 时间戳将因系统时区而异

console.log(moment('2020-01-01').unix());

> 1577854800