5

我有一个 $.ajax 请求并且正在保存开始时间和结束时间(使用new Date().getMilliseconds())。我看到一个奇怪的情况,有时我减去并startTime得到endTime一个负数。

(function(){
    var startTime = new Date().getMilliseconds();
    $.ajax({
        url:"/url.php",
        data: someObject,
        method: "POST",
        complete:function(r){
            var endTime = new Date().getMilliseconds();
            console.log(endTime - startTime); // sometimes negative?!
        }
    });
})();

有人可以解释一下吗?我敢肯定,除了时空连续体的裂痕之外,还有一个合乎逻辑的解释。

(如果有更好的方法来衡量这一点,那也将不胜感激!)

4

3 回答 3

8

.getMilliseconds返回创建对象时的毫秒部分。Date因此,在 50% 的比较中,该部分将高于或低于任何其他 Date 对象的部分。

你想要的是new Date().getTime(),它返回自 1970 年 Unix 纪元开始以来的绝对毫秒数。

于 2013-10-23T23:52:39.320 回答
5

这通常是负数(大约一半的时间),因为它没有得到自纪元(1/1/1970)以来的毫秒数。这是获取当前日期时间的毫秒数。因此,如果自上一秒以来已过去 400 毫秒,您将获得 400……如果自上一秒以来已过去 800 毫秒,您将获得 800。

您正在寻找的功能是: new Date().getTime()

于 2013-10-23T23:53:27.390 回答
3

一个小测试说

var date     = new Date();
var systemMS = date.getMilliseconds();
var timeMS   = date.getTime();


alert( 'Currently your clock is at ms :   '+ systemMS );
alert( '"ms" since 1 January, 1970 UTC. : '+ timeMS   );

所以尝试:

var start = new Date().getTime(); // note getTime()
$.ajax({
    url     :"/url.php",
    data    : someObject,
    method  : "POST",
    cache   : false,              // prevent caching response
    complete: function(){
        var end = new Date().getTime();
        console.log( end - start );
    }
});

MDN说:

getMilliseconds getMilliseconds 返回的值是 0 到 999 之间的数字。

于 2013-10-23T23:53:05.093 回答