我试图将日期字符串转换为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中工作,以及如何在节点中复制功能?
答案 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)
2个选项的结果会稍有不同
选项1-忽略系统时区
List<List<type>>
选项2(“ moment.js”)-时间戳随系统时区而不同
console.log(Math.floor(new Date("2020-01-01").getTime()/1000));
> 1577836800