在javascript中将日期转换为时间戳?

sel*_*rai 142 javascript time date

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

new Date(myDate).getTime();
Run Code Online (Sandbox Code Playgroud)

它说NaN ..谁可以告诉如何转换它?

The*_*pha 169

var myDate="26-02-2012";
myDate=myDate.split("-");
var newDate=myDate[1]+","+myDate[0]+","+myDate[2];
alert(new Date(newDate).getTime());? //will alert 1330192800000
Run Code Online (Sandbox Code Playgroud)

更新:

var myDate="26-02-2012";
myDate=myDate.split("-");
var newDate=myDate[1]+"/"+myDate[0]+"/"+myDate[2];
alert(new Date(newDate).getTime()); //will alert 1330210800000
Run Code Online (Sandbox Code Playgroud)

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

  • 不是将日期字符串从"欧洲"格式转换为"美国"格式,最好将其转换为ISO 8601格式(`YYYY-MM-DD`),保证可以通过`Date()`理解,并且一般来说,日期字符串的最具互操作性的格式. (10认同)
  • 注意:`new Date(newDate).getTime()`将产生一个以毫秒为单位的时间戳。 (3认同)
  • 几秒钟使用:`Math.floor(new Date(newDate).getTime()/ 1000)` (3认同)
  • 来吧,说真的,他们真的应该考虑更好的命名而不是 getTime()! (3认同)

Ket*_*iya 46

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

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

  • @RobG 你能添加一个参数_为什么_不推荐吗?这将为您的评论增加价值和理解。 (6认同)
  • 不建议使用内置解析器。 (2认同)

Dio*_*ode 22

var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Run Code Online (Sandbox Code Playgroud)


Jal*_*sem 21

这个重构的代码会做到这一点

let toTimestamp = strDate => Date.parse(strDate)
Run Code Online (Sandbox Code Playgroud)

这适用于所有现代浏览器,除了ie8-

  • 这才是真正的答案.剩下的就是个玩笑. (8认同)

Tim*_*rax 9

如果你来这里是为了寻找当前时间戳

var date      = new Date();
var timestamp = date.getTime();
Run Code Online (Sandbox Code Playgroud)

或者干脆

new Date().getTime();
//console.log(new Date().getTime());
Run Code Online (Sandbox Code Playgroud)


ors*_*zky 8

为了将 (ISO) 日期转换为Unix 时间戳,我最终得到的时间戳比需要的长 3 个字符,所以我的年份约为 50k...

我必须将它除以 1000: new Date('2012-02-26').getTime() / 1000


Ala*_*ogu 6

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

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

工作示例:

(new Date("2012-02-26")).getTime();
Run Code Online (Sandbox Code Playgroud)

  • 无需将日期瞬间括在括号中。只需要正确的字符串格式。 (2认同)

hkn*_*iyi 6

只是提醒

Date.parse("2022-08-04T04:02:10.909Z")
// 1659585730909

Date.parse(new Date("2022-08-04T04:02:10.909Z"))
// 1659585730000 (milliseconds are ignored)
Run Code Online (Sandbox Code Playgroud)


ant*_*njs 5

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

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

在您的情况下:

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

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

  • 好的,至少现在上面的代码没有使用无效的日期格式-它给出错误的日期,原因有两个。在上面您定义了日期2014年3月2日(您的实地订单混乱了)。如果字段顺序正确,则可以定义2012年3月26日的日期(月份值从零开始)。但是由于OP有一个字符串,而不是一系列数字,所以即使您解决了这些问题,它也没有太大用处。 (2认同)
  • 第一个代码示例仍然是“错误的”,在某些以“ 0”开头的字符串上使用“ Number”在某些引擎上存在问题-使用“ parseInt”并指定基数。 (2认同)

dee*_*ssn 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())));
}
Run Code Online (Sandbox Code Playgroud)