如何从 String 创建纪元?

How can I create epoch from String?

全部,我需要使用 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 错误。有没有办法在保留毫秒的情况下将第二个示例中的日期时间转换为纪元?

dateObj.getTime() 将从纪元开始 return 毫秒。将它除以 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));

下面是一个可能的解决方法:

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) 中包含毫秒数。您也可以完全丢弃它们,在这种情况下,您只需要 replace 部分而不需要 exec 部分。

逆运算

下面是使用标准日期方法进行反向操作的可能方法。

注意:几乎没有测试过。

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');