【问题标题】:Javascript Time Comparison: What is the best way to achieve this?Javascript时间比较:实现这一目标的最佳方法是什么?
【发布时间】:2012-11-22 01:17:59
【问题描述】:

这里我有一个函数用于计算两个时间变量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

【问题讨论】:

  • 所以...过去是start &lt; end &lt; current,现在是start &lt; current &lt; end,未来是current &lt; start &lt; end
  • 这没什么意义。
  • 我看不出有什么臭的 jQuery,我们被烧死了!!
  • 您不应该期望 Date 在所有浏览器中始终如一地解析字符串,例如"Mon Nov 22 2012 08:45:00 GMT+0800" 可以被认为是无效的日期,因此符合要求的浏览器将返回 NaN,其他浏览器将忽略不正确的日期并返回 2012 年 11 月 22 日星期四的日期对象。打破它起来手动解析,就会得到一致的结果。

标签: javascript jquery html date date-format


【解决方案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!");
    }
}​

【讨论】:

    【解决方案2】:

    您应该比较 someDate.getTime() 的值,因为它会为您提供一个表示 unix 纪元(自 1970 年 1 月 1 日以来经过的时间)的整数,这将是可比较和可减去的。

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

    干杯

    【讨论】:

    • 不需要getTime,使用日期对象进行算术运算可以有效地调用它(顺便说一下,时间值是UTC,并不是说它在这里有什么区别)。
    【解决方案3】:

    这是多余的:

     var difference = currentTime - startTime; 
    
     if (difference > 0 && currentTime > startTime)
    

    鉴于分配,difference &gt; 0currentTime &gt; startTime 正在测试完全相同的条件。如果一个为真,另一个也总是为真,因此没有理由同时测试两者。

    真的,你只需要这个:

    if (startTime > endTime) {
       throw "Invalid range: end precedes start";
    }
    
    if (startTime < currentTime) {
        if (endTime < currentTime) {
             alert("Past");
        } else {
             alert("Current");
        }
    } else {
      alert ("Future");
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多