全部,我需要使用Javascript从字符串创建纪元时间。现在我知道我可以使用以下内容:
var dateStr = '01/01/2016 1:10 PM'
var dateObj = new Date(dateStr);
console.log(dateObj.getSeconds());
我遇到的问题是使用上面的代码我的数据中有毫秒。以下面的例子为例:
var dateStr = '01/01/2016 1:10:49.181 PM'
var dateObj = new Date(dateStr);
console.log(dateObj.getSeconds());
使用该格式,我收到NaN错误。有没有办法将第二个例子中的日期时间转换为纪元,同时保留毫秒?
答案 0 :(得分:1)
dateObj.getTime()
将从纪元开始返回毫秒。将它除以1000然后得到秒数。
var dateStr = '01/01/2016 1:10 PM'
var dateObj = new Date(dateStr);
console.log(Math.round(dateObj.getTime() / 1000));
var dateStr = '01/01/2016 1:10:49.181'
var dateObj = new Date(dateStr);
console.log(Math.round(dateObj.getTime() / 1000));
答案 1 :(得分:0)
以下是可能的解决方法:
var dateStr = '01/01/2016 1:10:49.181 PM',
reg = new RegExp(/\.[0-9]{1,3}/);
var dateObj = new Date(dateStr.replace(reg, ''));
console.log(
(dateObj.getTime() + 1000 * Number(reg.exec(dateStr)[0]))
);
这将包括最终结果中的毫秒数(1451650249181)。您也可以完全丢弃它们,在这种情况下,只需要替换部分而不需要 exec 部分。
反向操作
以下是使用标准Date方法进行反向操作的可能方法。
注意:几乎没有经过测试。
var ts = new Date(1451650249181);
var dateStr =
('0' + ts.getDate()).substr(-2, 2) + '/' +
('0' + (ts.getMonth() + 1)).substr(-2, 2) + '/' +
ts.getFullYear() + ' ' +
(ts.getHours() % 12 || 12) + ':' +
('0' + ts.getMinutes()).substr(-2, 2) + ':' +
('0' + ts.getSeconds()).substr(-2, 2) + '.' +
('00' + (ts.getTime() % 1000)).substr(-3, 3) + ' ' +
(ts.getHours() >= 12 ? 'PM' : 'AM');