JavaScript中将UTC字符串转换为Epoch时间

8

我该如何在javascript中将UTC日期时间字符串(例如2011-03-29 17:06:21 UTC)转换为Epoch格式(毫秒)?

如果无法实现,请问有没有办法比较(像<,>)UTC日期时间字符串?

5个回答

6
请注意,UTC日期字符串可以像字符串一样按字典顺序进行比较,因为高位值出现在字符串的左侧。
var s1 = '2011-03-29 17:06:21 UTC'
  , s2 = '2001-09-09 01:46:40 UTC';
s1 > s2; // => true
s2 > s1; // => false

你可以使用 Date.UTC 方法,从示例字符串中提取日期字段并返回毫秒数:
var getEpochMillis = function(dateStr) {
  var r = /^\s*(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)\s+UTC\s*$/
    , m = (""+dateStr).match(r);
  return (m) ? Date.UTC(m[1], m[2]-1, m[3], m[4], m[5], m[6]) : undefined;
};
getEpochMillis('2011-03-29 17:06:21 UTC'); // => 1301418381000
getEpochMillis('2001-09-09 01:46:40 UTC'); // => 1000000000000

+1 优雅,但是在Safari 4.1上Date.parse返回NaN。在Firefox 3.6上运行良好。 - Vik David
2
@Vik David:谢谢你提醒 Safari 的问题;我更新了我的回答,使用 ECMA-262 第五版中定义的 UTC 方法,这应该得到更好的支持。在 JavaScript 中解析日期确实是一件痛苦的事情... - maerics

2

这是如何做到的。毫不含糊。Date.UTC接受一个UTC时间戳并返回纪元。

var epoch_date = Date.UTC(year,mon,day,hours,min,sec,milisec);

1

使用datejs可以帮助您将UTC字符串转换为日期对象。之后只需在日期对象上调用.getTime()即可获得毫秒数。


你会如何准确地做到这一点?我已经包含了date.js库并尝试了new Date("2011-03-29 17:06:21 UTC")和Date.parse("2011-03-29 17:06:21 UTC")但它们返回无效或NaN。 - katsuya

1
只要日期时间字符串是类似于ISO8601格式的明确表示(即不是MM/DD/YYYY与DD/MM/YYYY之间的区别),您可以使用Date构造函数进行解析,然后执行Math.floor操作:
Math.floor(new Date('2011-03-29 17:06:21 UTC') / 1000); // => 1301418381

0
您可以这样使用 getDateFromFormat(dateValue, dateFormat) (此处提供链接)
getDateFromFormat("2011-03-29 17:06:21","yyyy-MM-dd HH:mm:ss")

它返回毫秒级别的纪元时间。

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