如何将格式为“YYYY-MM-DD hh:mm:ss”的日期转换为UNIX时间戳

9

如何将格式为“YYYY-MM-DD hh:mm:ss”(例如"2011-07-15 13:18:52")的时间转换为UNIX时间戳?

我尝试了这段JavaScript代码:

date = new Date("2011-07-15").getTime() / 1000
alert(date)

它可以工作,但是当我将time('2011-07-15 13:18:52')添加到输入中时,它会导致NaN

5个回答

17

使用长日期构造函数,并指定所有日期/时间组件:

var match = '2011-07-15 13:18:52'.match(/^(\d+)-(\d+)-(\d+) (\d+)\:(\d+)\:(\d+)$/)
var date = new Date(match[1], match[2] - 1, match[3], match[4], match[5], match[6])
// ------------------------------------^^^
// month must be between 0 and 11, not 1 and 12
console.log(date);
console.log(date.getTime() / 1000);

兄弟,我已经得到了时间戳,但它不正确。当我输入“2011-07-15 14:54:12”时,我得到的时间戳是“1313434452”。但是当我使用“http://www.onlineconversion.com/unix_time.htm”进行检查时,它显示时间戳转换后的日期为错误的“Mon, 15 Aug 2011 07:48:52 GMT”。 - Amal Kumar S

15

以下代码适用于格式为YYYY-MM-DD hh:mm:ss的日期时间:

function parse(dateAsString) {
    return new Date(dateAsString.replace(/-/g, '/'))
}

这段代码将 YYYY-MM-DD hh:mm:ss 转换为易于解析的 YYYY/MM/DD hh:mm:ss,以便能够被 Date 构造函数轻松解析。


这个答案是最好的方法。谢谢! - rtribaldos

6

您已经接受了一个答案,但是可以使用更简单的正则表达式:

function stringToDate(s)  {
  s = s.split(/[-: ]/);
  return new Date(s[0], s[1]-1, s[2], s[3], s[4], s[5]);
}

alert(stringToDate('2011-7-15 20:46:3'));

当然,输入字符串必须是正确的格式。

1

月份从0开始计算,不同于日期!所以这将完美地工作(已测试

function dateToUnix(year, month, day, hour, minute, second) {
    return ((new Date(Date.UTC(year, month - 1, day, hour, minute, second))).getTime() / 1000.0);
}

-3

这将返回自1970年1月1日以来的毫秒数: Date.parse('2011-07-15 10:05:20')

只需将其除以1000即可获得秒而不是毫秒。


日期 = 新日期.解析('2011-07-15 10:05:20')/ 100 这是您的意思吗?我得到了“NaN”错误。 - Amal Kumar S
console.log(Date.parse('2011-07-15 10:05:20'));NaN这不是一个被识别的输入格式 - Lightness Races in Orbit
那么必须因浏览器而异。在Chrome中测试过,没有问题(http://jsfiddle.net/nslr/v2xQ6/)。 - Thor Jacobsen

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