我想把这个1332251639632变成这个1332251639
我尝试了这段代码,但因为它不是一个字符串,所以它不起作用
var date = new Date();
var t = date.getTime();
var p = t.substring(10);
alert(p);
我想剪掉它,因为在 php time()中返回 10 位数字
我想把这个1332251639632变成这个1332251639
我尝试了这段代码,但因为它不是一个字符串,所以它不起作用
var date = new Date();
var t = date.getTime();
var p = t.substring(10);
alert(p);
我想剪掉它,因为在 php time()中返回 10 位数字
像这样?
var p = parseInt(t/1000);
我认为更好的方法是:
var dateObject = new Date(),
time = dateObject.getTime();
Math.floor ( time / 1000 );
现在原因是:
parseInt() ECMA Specs期望一个字符串被某个基数转换。在幕后,解释器正在处理字符串,最后返回整数。示例MDN该功能如何工作。正如Chris Wesseling 指出的那样,由于字符串和基数的额外工作,它更慢。ES5 将在未来版本的浏览器中实现,将强制使用基数,原因如下:
parseInt("011"); //返回9,0起始字符串表示八进制数
parseInt("011", 10); //按预期返回11
getTime() MDN将返回一个数字,自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,没有从字符串到数字的转换。这意味着“语义上”更好地使用舍入功能。
有点离题 即使是Linux y2k(38) 问题也不会产生任何影响,因为该数字是 64 位的,并且 Javascript 中的整数在 53-bits ECMA Specs SO question中呈现。
您可以按照建议的 Ilia 解决方案进行舍入,或者使用如下子字符串:
var date = new Date();
var t = date.getTime().toString();
var p = t.substring(0, 10);
alert(p);
尝试:
var t = "" + date.getTime();
var p = t.substring(0,10);
这个怎么样?
var date = new Date();
var t = date.getTime();
var p = parseInt(t.toString().match(/\d{10}/));
alert(p);
它将数字转换为字符串,匹配前 10 位数字,然后将结果重新转换为数字。
好奇有没有区别
var p = parseInt(t/1000);
和
var p = Math.floor(t/1000);
我这样做了:
start = new Date().getTime(); for ( var i=0; i<1000000; i++) parseInt(start/1000); new Date().getTime() - start;
和
start = new Date().getTime(); for ( var i=0; i<1000000; i++) Math.floor(start/1000); new Date().getTime() - start;
在 ChromiumparseInt
中大约需要 7.2 秒,而Math.floor
在我的上网本上需要 6.6 秒。
Firefox 抱怨脚本耗时过长。它只能在大约同一时间内完成 200000 次操作。
所以我想这非常依赖于实现。