如何将日期转换为时间戳?


165

我想将日期转换为时间戳,我的输入是26-02-2012。我用了

new Date(myDate).getTime();

上面写着NaN ..有人能告诉你如何转换吗?



您可能需要看一下date.js库:datejs.com
rsbarro 2012年

1
您是否使用过Date(myDate).getTime()(您标记为代码的内容),或者之前的“新”一词意味着要成为代码的一部分?您付出的努力越多,得到的答案就越好。
TJ Crowder 2012年

@rsbarro:除非似乎不再进行维护了(并且存在一些突出的错误)。MomentJS看起来还不错。
TJ Crowder 2012年

@TJCrowder我使用过date.js,它已经满足了我的需要,但是您说的对,一段时间以来还没有积极地进行工作。我将检查一下moment.js。谢谢!
rsbarro 2012年

Answers:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

更新:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

演示(在Chrome,FF,Opera,IE和Safari中测试)。


不幸的是,这在Safari5中不起作用,因为它返回NaN。在Safari中,您必须new Date(year, month, day);针对此示例使用其他可能的构造函数:new Date(myDate[2], myDate[1], myDate[0]);
插入用户

13
与其将日期字符串从“欧洲”格式转换为“美国”格式,不如将其转换为ISO 8601格式(YYYY-MM-DD)更好,这可以确保Date(),并且通常说来,日期字符串是最可互用的格式。
Walter Tross 2014年

3
注意:new Date(newDate).getTime()将产生以毫秒为单位的时间戳记。
h7r 2014年

3
几秒钟使用: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum 2015年

54

试试这个函数,它使用Date.parse()方法,不需要任何自定义逻辑:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));

25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();

24

这个重构的代码可以做到

let toTimestamp = strDate => Date.parse(strDate)

这对所有现代浏览器都有效,除了ie8-


10

这里有两个问题。首先,您只能在日期的实例上调用getTime。您需要将新的日期括在方括号中或将其分配给变量。

其次,您需要以正确的格式向它传递一个字符串。

工作示例:

(new Date("2012-02-26")).getTime();

1
无需将日期瞬间包装在方括号中。仅需要正确的字符串格式。
maswerdna

5

你只需要扭转你的日期数字,变化-,

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

在您的情况下:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

PS UK语言环境在这里并不重要。


该日期格式也是无效的,并且无法在跨浏览器和跨语言环境中可靠地工作(例如,对于在我使用英国语言​​环境的Chrome浏览器来说,它不起作用)。如果您要建议一种格式,请建议一种实际记录为有效的格式。
TJ Crowder 2012年

我从developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…获得示例。我只是忘了收起琴弦。现在可以了。
antonjs 2012年

2
好的,至少现在上面的代码没有使用无效的日期格式-出于两个不同的原因,它只是给出了错误的日期。在上面您定义了日期2014年3月2日(您的实地订单混乱了)。如果字段顺序正确,则可以定义日期为2012年3月 26日(月份值从零开始)。但是由于OP有一个字符串,而不是一系列数字,所以即使您解决了这些问题,它也不是很有用。
TJ Crowder 2012年

@TJ Crowder感谢您的建议。如您所说,我已修复了将字符串转换为数字的代码。谢谢
antonjs 2012年

2
第一个代码示例仍然错误的,并且在某些引擎上使用Number以a开头的字符串0是有问题的-使用parseInt并指定基数。
TJ Crowder 2012年

5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}

4

要将(ISO)日期转换为Unix时间戳,我最终获得了比所需时间长3个字符的时间戳,因此我的年份大约为5万。

我必须将其定义为1000: new Date('2012-02-26').getTime() / 1000


3

对于那些希望以以下格式阅读时间戳的人, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

用法示例:备份文件扩展名。 /my/path/my.file.js.20190220


3

万一您来这里寻找当前时间戳

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

您的字符串格式不是指定Date对象要处理的格式。您必须自己解析,使用MomentJS之类的日期解析库或更旧的(据我所知,目前还没有维护)DateJS,或者2012-02-29在请求Date解析之前将其解析为正确的格式(例如)。

获得的原因NaN:当您要求new Date(...)处理无效的字符串时,它将返回一个Date设置为无效日期的对象(new Date("29-02-2012").toString()return "Invalid date")。getTime()在此状态下调用日期对象将返回NaN


@benvds:太好了,谢谢。尽管我发现“也对DOM无损”的注释有点奇怪……我希望他们的意思是它不会更改Date对象(与DOM无关)。
TJ Crowder

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

其他开发人员已经提供了答案,但是以我自己的方式,您可以即时执行此操作,而无需创建任何用户定义的函数,如下所示:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.