1

我正在尝试检查特定的 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,输出总是在之后。

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

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

4

5 回答 5

2

测试代码会出现以下错误:

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

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

// 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");
}

于 2015-02-04T15:23:35.100 回答
1

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

这是一个有效的 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");
 }
于 2015-02-04T15:27:32.190 回答
0

尝试:

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

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

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

var targetDate = "2015-02-04T13:30:00Z";

var isbefore18=targetDate.substring(11,13)-18<0;

isbefore18 /*  value: (Boolean) true */
于 2015-02-04T16:10:23.127 回答
0

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

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

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

targetDate.getHours()

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

于 2015-02-04T16:22:09.623 回答