将日期和时间转换为Unix时间戳

62

我正在这样显示日期和时间

24-Nov-2009 17:57:35

我想将它转换为Unix时间戳,以便可以轻松操作。我需要使用正则表达式匹配字符串的每个部分,然后从中计算出Unix时间戳。

我对正则表达式很不熟悉,但我想出了这个。请建议改进 ^.^

/((\d){2}+)-((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)+)-((\d){4}+) ((\d){2}+):((\d){2}+):((\d){2}+)/gi

我该如何做到这一点?


完整的旁注,但每次看到你的名字我都会想起“本·沙洛克·洛克·本”(参考:http://www.discogs.com/House-Of-Pain-Shamrocks-And-Shenanigans-Boom-Shalock-Lock-Boom/release/229941 :) - Crescent Fresh
1
我的邪恶孪生兄弟,我们不谈论他。 - Ben Shelock
请参考以下链接:http://stackoverflow.com/questions/1457607/how-to-convert-a-gmt-timestamp-to-unix-timestamp-javascript以及http://stackoverflow.com/questions/1416296/parsing-a-date-in-long-format-from-atom-feed - user195488
1
你可以在正则表达式的分组中去掉“+”符号。这意味着“1次或多次”,而你只希望该分组匹配一次。 - Marco
4个回答

92
如果你需要一个好的日期解析函数,我建议看一下 date.js。它可以接受几乎任何你输入的日期字符串,并返回 JavaScript Date 对象。
一旦你有了一个 Date 对象,你可以调用它的 getTime() 方法,这将给你自1970年1月1日以来的毫秒数。只需将结果除以1000,即可得到 Unix 时间戳值。
在代码中,只需包含 date.js,然后:
var unixtime = Date.parse("24-Nov-2009 17:57:35").getTime()/1000

6
你甚至不需要使用库来解析那种格式,是吗? - Dexter
4
坚持使用你的正则表达式。如果你使用的是固定的日期格式,那么本地化 JavaScript 库就有些过度了。如果你能控制这种格式,建议考虑使用更中立且易于解析的格式,如 ISO8601。 - peller
38
Date.parse("24-Nov-2009 17:57:35").getTime 不是一个函数。正确的方式是 Date.parse("24-Nov-2009 17:57:35")/1000。为什么这个错误的答案会得到这么多赞? - B T
1
Date.parse()并非完全可靠。以下是有关跨浏览器Date.parse()行为的一些信息:http://dygraphs.com/date-formats.html。在我的情况下,我通过艰难的方式学习到,一个形如“2016-08-09 05:00 PM”的日期时间字符串将在Firefox 47中产生NaN。 - gps
1
这就是为什么答案实际上建议不要使用浏览器的Date.parse(),而是使用date.js,它提供了一个更健壮的替代方案。 - Ian Clelland
显示剩余3条评论

67

看起来上面的答案中 getTime 不是一个函数。

Date.parse(currentDate)/1000

我刚刚在浏览器控制台中复制了Date.parse('19-04-2015 18:31:00')/1000,但它返回NaN。你能提供解决方案吗?@chovy - Vipul Hadiya
2
我猜测你的日期格式不正确。你也可以使用moment(datestring).unix()。 - chovy
日期格式为dd-mm-yy H:i:s。我做错了吗? - Vipul Hadiya
var unixtime = (new Date).getTime() / 1000; http://www.w3schools.com/jsref/jsref_gettime.asp - briiC
请注意,在Chrome浏览器中可能不正确:https://dev59.com/GGsz5IYBdhLWcg3wWmUy - Hoàng Long

7
你可以使用Date.getTime()函数,或者直接使用Date对象,将其除以1000即可得到以毫秒为单位的时间。
var d = new Date();

d/1000
> 1510329641.84

d.getTime()/1000
> 1510329641.84

0
使用日期选择器获取日期和时间选择器获取两个变量,以下是如何将它们以Unix时间格式组合并提取出来的方法...
let datetime = oDdate+' '+oDtime;
let unixtime = Date.parse(datetime)/1000;
console.log('unixtime:',unixtime);

为了证明它:

let milliseconds = unixtime * 1000;
dateObject = new Date(milliseconds);
console.log('dateObject:',dateObject);

享受!


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