将日期与空值JavaScript进行比较

时间:2017-01-26 17:46:16

标签: javascript date

期望输出:我传递的日期变量需要与今天之前或之后的今天和返回天气进行比较。然后我想回来"是"或"否"表示天气是否有效。

<script>
    function calculate(currentlyEffective) {

        var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
        var expDate = currentlyEffective.Expiration_Date;
        expDate = new Date(expDate).toUTCString();
        var result = "";

        if (expDate < now_utc) {
            result = "No"
        }
        else {
            result = "Yes"
        }
        return result;
    }

</script>

问题:

  1. 传递的某些日期没有值,因为它们尚未过期。这将返回Thu, 01 Jan 1970 00:00:00 GMT此处所需的输出将为"Yes",即使日期将小于今天,因为它没有到期日期使其"Yes"仍处于活动状态。

  2. 计算中没有正确发生的事情。我的返回值始终为"Yes"

  3. 问题:

    1. 我是否正确地将这些日期与我的if else函数进行比较?

    2. 即使在expDate之前的日期是在今天之前,我仍然会得到&#34;是&#34;作为我的回报价值。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您将字符串和日期对象与&lt; ?你能指望什么?你不需要时间字符串,你需要时间作为数字:

var now=new Date().getTime();//current time as number (ms since...)
var old=new Date(timestring).getTime();//time as number with a timestring ("12:20 ...")
if(now<old){
 alert("future date!");
}

完整代码:

    function calculate(currentlyEffective) {

    var now = new Date().getTime();
    var expDate = currentlyEffective.Expiration_Date;
    expDate = new Date(expDate).getTime();

    return expDate<now?"Yes":"No";
}

正如RobG所指出的,这可以缩短,因为使用&lt;在两个对象上,trys将它们转换为数字,实际上调用getTime:

var calculate=(currentlyEffective)=>new Date(currentlyEffective.Expiration_Date)<new Date()?"Yes":"No";