2

我想把这个1332251639632变成这个1332251639

我尝试了这段代码,但因为它不是一个字符串,所以它不起作用

var date = new Date();
var t = date.getTime();
var p = t.substring(10);

alert(p);

我想剪掉它,因为在 php time()中返回 10 位数字

4

6 回答 6

2

像这样?

var p = parseInt(t/1000);
于 2012-04-05T00:50:43.360 回答
2

我认为更好的方法是:

var dateObject = new Date(),
    time = dateObject.getTime();
Math.floor ( time / 1000 );

现在原因是:

  1. parseInt() ECMA Specs期望一个字符串被某个基数转换。在幕后,解释器正在处理字符串,最后返回整数。示例MDN该功能如何工作。正如Chris Wesseling 指出的那样,由于字符串和基数的额外工作,它更慢。ES5 将在未来版本的浏览器中实现,将强制使用基数,原因如下:

    parseInt("011"); //返回9,0起始字符串表示八进制数

    parseInt("011", 10); //按预期返回11

  2. getTime() MDN将返回一个数字,自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,没有从字符串到数字的转换。这意味着“语义上”更好地使用舍入功能。

  3. floor( x ) ECMA 规范旨在处理数字。返回不大于 x 的最大数值。使用MDN
  4. ceil(x) ECMA Specs几乎相同 - 返回不小于 x 的最小 Number 值。使用MDN

有点离题 即使是Linux y2k(38) 问题也不会产生任何影响,因为该数字是 64 位的,并且 Javascript 中的整数在 53-bits ECMA Specs SO question中呈现。

于 2012-04-05T17:22:10.553 回答
1

您可以按照建议的 Ilia 解决方案进行舍入,或者使用如下子字符串:

var date = new Date();
var t = date.getTime().toString();
var p = t.substring(0, 10);

alert(p);
于 2012-04-05T00:54:48.023 回答
0

尝试:

var t = "" + date.getTime();
var p = t.substring(0,10);
于 2012-04-05T00:54:31.683 回答
0

这个怎么样?

var date = new Date();
var t = date.getTime();
var p = parseInt(t.toString().match(/\d{10}/));

alert(p);

它将数字转换为字符串,匹配前 10 位数字,然后将结果重新转换为数字。

于 2012-04-05T01:00:02.410 回答
0

好奇有没有区别

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 次操作。

所以我想这非常依赖于实现。

于 2012-04-05T12:46:53.547 回答