首页 > 解决方案 > 将 php 中的开始日期时间和结束日期时间与 Javascript 中的日期进行比较

问题描述

在阅读了与此主题相关的许多问题后,我仍然遇到解决问题的问题。

我在比较 JavaScript 中的日期时间时遇到问题。我正在从有两条记录的数据表中读取“开始日期”和“结束日期”。

我正在使用下面的行来创建我的“nowdate”:

    nowdate = ('0' + (d.getMonth() + 1)).slice(-2)  + "-" +('0' + d.getDate()).slice(-2)  + "-" + d.getFullYear()  + " " + ('0' + d.getHours()).slice(-2) + ":" + ('0' + d.getMinutes()).slice(-2);

这给了我:

Now date:   03-01-2019 11:28
Start date: 03-01-2019 23:59
End date :  03-08-2019 23:59

Now date:   03-01-2019 11:28
Start date: 04-01-2019 23:59
End date:   04-30-2019 23:59

然后我需要知道“开始日期”和“结束日期”是否在“现在日期”之间。

if (new Date(startdate) >= new Date(nowdate) && new Date(nowdate) <= new Date(enddate)) {
console.log("Active: ");
} else if (new Date(nowdate) < new Date(enddate)) {
console.log("Scheduled: ");
} else {
console.log("Complete: ");
}

编辑代码:

// RECORD 1
MOMENT NOW DATE:  03-01-2019 14:03
MOMENT START DATE:  03-01-2019 23:03
MOMENT END DATE:  03-08-2019 23:03
// RECORD 2
MOMENT NOW DATE:  03-01-2019 14:03
MOMENT START DATE:  04-01-2019 23:04
MOMENT END DATE:  04-30-2019 23:04


var nowdate;
            var d = new Date();
            nowdate = (d.getFullYear() + "-" + ('0' + (d.getMonth() + 1)).slice(-2))  + "-" + ('0' + d.getDate()).slice(-2)  + " " + ('0' + d.getHours()).slice(-2) + ":" + ('0' + d.getMinutes()).slice(-2);

            nowdate = moment(nowdate).format('MM-DD-YYYY HH:MM');
            var startdate2 = moment(startdate2).format('MM-DD-YYYY HH:MM');
            var enddate2 = moment(enddate2).format('MM-DD-YYYY HH:MM');

            console.log("MOMENT NOW DATE: ", nowdate);
            console.log("MOMENT START DATE: ", startdate2);
            console.log("MOMENT END DATE: ", enddate2);

            if (startdate2 >= nowdate ||  enddate2 <= nowdate) {
                console.log("Active: ");
            } 

            else if (startdate2 > nowdate) {
                console.log("Scheduled: ");
            } 

我遇到的问题是两条记录都显示为“活动”。antone 可以看到我哪里出错了。

非常感谢您的帮助和时间。

标签: javascript

解决方案


正如其他人所说,如果使用new Date()这种方式,您必须提供有效的日期格式字符串。您可以解析日期部分的字符串并构造它:

const dt = new Date(2019, 2, 1, 11, 28); // months are 0 index based

或者,您可以使用MomentJsLuxon 之类的工具来解析您的日期,然后进行差异检查。Moment 将为您提供最大的灵活性,以提供您自己的解析格式。

例如,您可以使用 Moment 通过向 Moment 提供格式来正确解析几乎任何格式的日期字符串。假设您有来自后端的当前日期字符串,如03-01-2019 14:03. 使用 Moment,您可以通过const sd = moment('03-01-2019 14:03', 'MM-DD-YYYY HH:mm'). 通过 Moment 获取当前日期const now = moment()。然后比较sd > now


推荐阅读