JavaScript将时间转换为Epoch格式

3

我有一个日期字符串,长这样:2016-02-21T02:14:39.000000

如果可能的话,我想用JavaScript将其转换为Epoch时间。


严格来说,没有时区的日期字符串应该被视为本地时间,这是你想要的吗? - RobG
2个回答

3

尝试

var ts = "2016-02-21T02:14:39.000000";

var unix_seconds = ((new Date(ts)).getTime()) /1000;

console.log(unix_seconds);

getTime 返回的是毫秒数,所以需要除以1000以获得秒数

https://jsfiddle.net/tbxac0de/


除此之外,目前使用的浏览器并不都支持该格式,而且其中一些(例如Chrome)错误地将其视为UTC,因此更安全的做法是解析它。 - RobG

0

假设您所说的“将其转换为Epoch时间”是指自公共UNIX和ECMAScript纪元以来的秒数或毫秒数。可以通过将字符串转换为Date并获取其内部时间值来找到时间值。

将字符串转换为Date的最佳方法是手动解析它。库可以帮助,但编写函数并不难。例如,要将“2016-02-21T02:14:39.000000”解析为本地日期(即ISO 8601格式而没有时区),请使用以下内容:

// Parse y-m-dTh:m:s as local date and time
// since there is no timezone
function parseIsoLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0],b[1]-1,b[2],b[3],b[4],b[5],
                 ((b[6]||'')+'000').slice(0,3));
}

// Convert string to Date
var d = parseIsoLocal('2016-02-21T02:14:39.000000');

// Show date and milliseconds since epoch
document.write(d + '<br>' + +d);

上述内容可以轻松扩展为将字符串视为UTC,合并时区并验证输入,但在这种情况下似乎不需要。

请注意,大多数浏览器将解析OP中的格式,但某些正在使用的浏览器不会,并且对于那些会的浏览器,有些将其视为本地时间,有些则视为UTC时间。根据ISO 8601,应将其视为本地时间,因此我已经这样做了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接