【问题标题】:Javascript Comparing Time not workingJavascript比较时间不起作用
【发布时间】:2015-02-04 15:16:17
【问题描述】:

我正在尝试检查特定的 ISO 日期时间是否在 18:00 之前

这是简单的代码:

   // Define the date I want to check
    var targetDate = "2015-02-04T13:30:00Z";
    // Parse the string into a date object
    var target = new Date.parse(targetDate);
    // Compare the target date againt a new date object set to 18:00:00
    if(target < new Date().setHours(18 , 0, 0)){
        console.log("BEFORE");
    } else {
        console.log("AFTER");
    }

即使我的 targetDate 中的时间设置为 13:30:00,输出总是在之后。

我搜索了如何比较时间,从我发现的结果来看,我所做的简单比较应该可以工作。

如果有人能指出我做错了什么,我将不胜感激。

【问题讨论】:

    标签: javascript datetime datetime-comparison


    【解决方案1】:

    测试代码出现以下错误:

    Uncaught TypeError: function parse() { [native code] } is not a constructor
    

    这是因为“new”关键字。删除它可以解决您的问题:

    // Define the date I want to check
    var targetDate = "2015-02-04T19:30:00Z";
    // Parse the string into a date object
    var target = Date.parse(targetDate);
    // Compare the target date againt a new date object set to 18:00:00
    if (target < new Date().setHours(18, 0, 0)) {
      console.log("BEFORE");
    } else {
      console.log("AFTER");
    }

    【讨论】:

    • 我正在输出到 nodejs 控制台,但由于某种奇怪的原因它没有抛出错误
    【解决方案2】:

    当您尝试解析目标数据时,您不必使用new 关键字。

    Here's an working JSFiddle;

    代码:

     // Define the date I want to check
     var targetDate = "2015-02-04T13:30:00Z";
     // Parse the string into a date object
     var target = Date.parse(targetDate);
     // Compare the target date againt a new date object set to 18:00:00
     if (target < new Date().setHours(18, 0, 0)) {
         alert("BEFORE");
     } else {
         alert("AFTER");
     }
    

    【讨论】:

      【解决方案3】:

      试试:

      var targetDate = new Date("2015-02-04T13:30:00Z");
      var numHours = targetDate.getHours();
      if (numHours < 18) {
        console.log("BEFORE");
      } else {
        console.log("AFTER");
      }
      

      【讨论】:

        【解决方案4】:

        如果你可以依赖 ISO 格式并且不想将其转换为本地时间

        您可以只查看小时子字符串。

        var targetDate = "2015-02-04T13:30:00Z";
        
        var isbefore18=targetDate.substring(11,13)-18<0;
        
        isbefore18 /*  value: (Boolean) true */
        

        【讨论】:

          【解决方案5】:

          大卫 P 有正确的答案。 Date() 由日期部分和时间部分组成

          new Date().setHours(18,0,0)
          

          今天 18:00 创建一个日期,该日期始终大于 2015 年 2 月 4 日 17:30,除非您有时间机器。

          targetDate.getHours()
          

          返回时间部分的小时值,听起来像是在寻找。

          【讨论】:

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