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

时间:2017-09-15 10:43:42

标签: javascript node.js unix-timestamp

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

我的代码在我的客户端上完美运行,但是当我在服务器上运行它时出现错误:

  

(node:19260)UnhandledPromiseRejectionWarning:未处理的promise拒绝(拒绝id:1):TypeError:input.substring不是函数

我的代码:

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中工作,以及如何在节点中复制功能?

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

我建议使用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处理日期/时间时效率非常高。

答案 2 :(得分:0)

Unix时间戳是特定日期之后的秒数。 Javascript函数getTime()返回从同一特定日期到指定日期的毫秒数。

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

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

答案 3 :(得分:0)

如果系统时区未设置为UTC,则

2个选项的结果会稍有不同

选项1-忽略系统时区

List<List<type>>

选项2(“ moment.js”)-时间戳随系统时区而不同

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

> 1577836800