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

Dan*_*hez 61 javascript date

我需要检查日期 - date格式中的字符串- 是否属于具有相同格式的其他两个日期之间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");
Run Code Online (Sandbox Code Playgroud)

我使用调试器并检查,dd/mm/yyyy并且to变量有from值.你可以帮帮我吗?

Dio*_*ode 86

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)
Run Code Online (Sandbox Code Playgroud)

  • +1 用于正确解析日期字符串,而不是将其留给依赖于实现的解析器。 (2认同)
  • 考虑数据库约定,第一次约会应该包括在内。例如`check &gt;= from &amp;&amp; check &lt; to` (2认同)
  • @chudasamachirag:问题是关于解析dd / mm / yyyy格式。这些日期是mm / dd / yyyy格式 (2认同)

小智 39

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

就像是

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))      alert("date contained");
Run Code Online (Sandbox Code Playgroud)

  • 当日期格式类似于 - 02/05/2013 但日期为 iso 格式(日期+时间)时,例如 - 2019-09-12T13:02:14.291Z 然后使用 [setHours](https:// /developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours) 比较日期之前的方法,例如 - `letcompareDate = 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 &lt;= endDate &amp;&amp; compareDate &gt;= startDate);` 希望对其他人有帮助:) (3认同)

Pan*_*ian 12

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

小提琴: 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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Bergi:如果日期是`NAN`那么这个函数`return False`所以`Date you check Or Pass`是`Not Availed`或`In Valid`,这是我和他的代码之间的地狱区别 (2认同)

And*_*huk 11

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

就我而言,我需要检查当前日期(今天)是否在其他两个日期的范围内,因此使用 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);

Run Code Online (Sandbox Code Playgroud)


小智 8

有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);
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)