检查一个日期是否在两个日期之间

IT技术 javascript date
2021-01-19 15:09:05

我需要检查一个date-dd/mm/yyyy格式的字符串- 是否落在具有相同格式的其他两个日期之间dd/mm/yyyy

我试过这个,但它不起作用:

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var from = Date.parse(dateFrom);
var to   = Date.parse(dateTo);
var check = Date.parse(dateCheck );

if((check <= to && check >= from))      
    alert("date contained");

我使用调试器并检查,tofrom变量isNaN有value。你可以帮帮我吗?

6个回答

Date.parse支持的格式 mm/dd/yyyydd/mm/yyyy对于后者,要么使用像 moment.js 这样的库,要么执行如下所示的操作

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);

console.log(check > from && check < to)
@chudasamachirag:问题是关于解析 dd/mm/yyyy 格式。这些日期采用 mm/dd/yyyy 格式
2021-03-15 15:09:05
+1 用于正确解析日期字符串,而不是将其留给依赖于实现的解析器。
2021-03-27 15:09:05
@Diode check :02/23/2018 from:11/20/2018 to:12/31/2018 它返回true。
2021-04-02 15:09:05
考虑数据库约定,第一次约会应该包括在内。例如check >= from && check < to
2021-04-10 15:09:05

不是直接比较日期,而是比较日期的 getTime() 值。getTime() 函数以整数形式返回自 1970 年 1 月 1 日以来的毫秒数——确定一个整数是否介于其他两个整数之间应该是微不足道的。

就像是

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))      alert("date contained");
当日期格式为 - 02/05/2013 时,它将完美地工作,但当日期为 iso 格式(日期+时间)时 - 2019-09-12T13:02:14.291Z 然后在比较日期之前使用 setHours方法,例如- let compareDate = new Date('checkDate').setHours(0, 0, 0, 0); let startDate = new Date('startDate').setHours(0, 0, 0, 0); let endDate = new Date('endDate').setHours(0, 0, 0, 0); console.log(compareDate <= endDate && compareDate >= startDate); 希望它会帮助别人:)
2021-03-14 15:09:05
@SayanSamanta:您的解决方案很简单且有效。谢谢。其他注意事项:此处不检查时间。
2021-03-22 15:09:05
NaN既没有也GetTime没有getTime方法?
2021-04-03 15:09:05

试试下面的内容。它会帮助你...

小提琴: http : //jsfiddle.net/RYh7U/146/

脚本 :

if(dateCheck("02/05/2013","02/09/2013","02/07/2013"))
    alert("Availed");
else
    alert("Not Availed");

function dateCheck(from,to,check) {

    var fDate,lDate,cDate;
    fDate = Date.parse(from);
    lDate = Date.parse(to);
    cDate = Date.parse(check);

    if((cDate <= lDate && cDate >= fDate)) {
        return true;
    }
    return false;
}
dateCheck("20/01/2015","22/01/2015","21/02/2015") 这种情况不起作用
2021-03-18 15:09:05
@Bergi:如果日期是NAN这个函数return False所以Date you check Or PassNot AvailedIn Valid这是我和他的代码之间的地狱区别
2021-03-19 15:09:05
如果我想检查now下下降7:00am9:00pm
2021-04-02 15:09:05
但是 OP 的 if 条件也是如此吗?而问题是关于日期幸福 NaN摆在首位(它是不是在所有的浏览器)
2021-04-09 15:09:05
@BhavinRana 这种情况不起作用,因为您使用的是 dd/mm/yyyy - 正确的是 mm/dd/yyyy
2021-04-11 15:09:05

有 50 票的答案不会只检查几个月的日期。这个答案是不正确的。下面的代码有效。

var dateFrom = "01/08/2017";
var dateTo = "01/10/2017";
var dateCheck = "05/09/2017";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1);  // -1 because months are from 0 to 11
var to   = new Date(d2);
var check = new Date(c);

alert(check > from && check < to);

这是在另一个答案中发布的代码,我更改了日期,这就是我注意到它不起作用的方式

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "07/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);


alert(check > from && check < to);

基于接受的答案的简化方法。

在我的情况下,我需要检查当前日期(今天)是否与其他两个日期的范围相同,因此使用 newDate() 而不是硬编码值,但您可以了解如何使用硬编码日期。


var currentDate = new Date().toJSON().slice(0,10);
var from = new Date('2020/01/01');
var to   = new Date('2020/01/31');
var check = new Date(currentDate);

console.log(check > from && check < to);