Javascript时间比较:实现这一目标的最佳方法是什么?

时间:2012-11-22 01:18:00

标签: javascript jquery html5 date date-format

这里我有一个函数用于计算两个时间变量startend之间的差异,并将输出显示为“过去”,“当前”或“未来”。

我能够计算出“当前”和“未来”值,但“过去”没有运气。这是jsFiddle,任何帮助都会很棒。

另外,我更喜欢无插件方式来实现这一目标。

//My Start time and End time
var start = "Mon Nov 22 2012 08:45:00 GMT+0800 (Malay Peninsula Standard Time)";
var end = "Mon Nov 22 2012 10:15:00 GMT+0800 (Malay Peninsula Standard Time)";

//Calling to test function
test(start, end);

//Function to calculate 
function test(startTime, endTime) {
    startTime= new Date(startTime);
    endTime= new Date(endTime);
    var currentTime = new Date();
    var difference = currentTime - startTime; 

    if (difference > 0 && currentTime > startTime) {
        alert ("Past!");
    } 

    if(startTime < currentTime && currentTime < endTime){ 
        alert("Current!");
    }

    if(difference < -1){
        alert("Future!");
    }
}​

链接到 jsFiddle

3 个答案:

答案 0 :(得分:1)

叹!!我只是需要一些睡眠。这是工作,这里是更新的jsFiddle:http://jsfiddle.net/9jk6a/9/

感谢所有帮助过的人。

//My Start time and End time
var start = "Mon Nov 23 2012 08:45:00 GMT+0800 (Malay Peninsula Standard Time)";
var end = "Mon Nov 23 2012 10:15:00 GMT+0800 (Malay Peninsula Standard Time)";

//Calling to test function
test(start, end);

//Function to calculate 
function test(startTime, endTime) {
    startTime= new Date(startTime);
    endTime= new Date(endTime);
    var currentTime = new Date();
    var difference = currentTime - startTime; 

    if (startTime < endTime && endTime < currentTime) {
        alert ("Past!");
    } 

    if(startTime < currentTime && currentTime < endTime){ 
        alert("Current!");
    }

    if(currentTime < startTime && startTime < endTime){
        alert("Future!");
    }
}​

答案 1 :(得分:0)

你应该比较someDate.getTime()的值,因为它会给你一个代表unix时代的整数(自1970年1月1日以来被摧毁的时间),它将具有可比性和可分数。

我编辑了小提琴:http://jsfiddle.net/9jk6a/12/

干杯

答案 2 :(得分:0)

这是多余的:

 var difference = currentTime - startTime; 

 if (difference > 0 && currentTime > startTime)

鉴于作业,difference > 0currentTime > startTime正在测试完全相同的条件。如果一个是真的,那么另一个也将是真的,所以没有理由同时测试它们。

真的,你需要的只是:

if (startTime > endTime) {
   throw "Invalid range: end precedes start";
}

if (startTime < currentTime) {
    if (endTime < currentTime) {
         alert("Past");
    } else {
         alert("Current");
    }
} else {
  alert ("Future");
}