繁体   English   中英

检查日期字符串是否大于 3 天

[英]Check if date string is greater than 3 days

我需要一些有关 javascript 代码的帮助,如果第二个日期大于 3 天,我需要检查两个字符串日期值(第一个日期和第二个日期),我以字符串格式获取值mm/dd/yyyy 请帮忙。

 var firstDate = '10/01/2019' var secondDate = '10/04/2019' if ((inputData.firstDate) + 3 === inputData.secondDate) { return { dateCheck: 'Not greater than 3 days' }; } else { return { dateCheck: 'Greater than 3 days' }; }

要将N天添加到日期,请使用Date.getDate() + N

var d1 = new Date('10/01/2019');
var d2 = new Date('10/04/2019');
var isGreater = +d2 > d1.setDate(d1.getDate() + 3); // false (equals three days)

鉴于上述,您可以制作一个简单的可重用功能

 /** * Check if d2 is greater than d1 * @param {String|Object} d1 Datestring or Date object * @param {String|Object} d2 Datestring or Date object * @param {Number} days Optional number of days to add to d1 */ function isDateGreater (d1, d2, days) { d1 = new Date(d1); return +new Date(d2) > d1.setDate(d1.getDate() + (days||0)) } console.log(isDateGreater('10/01/2019', '10/03/2019', 3)); // false (smaller) console.log(isDateGreater('10/01/2019', '10/04/2019', 3)); // false (equal) console.log(isDateGreater('10/01/2019', '10/05/2019', 3)); // true (greater than) // Without the optional third parameter console.log(isDateGreater('10/01/2019', '10/05/2019')); // true (is greater date)

回顾一下:创建一个函数,在将N天添加到一个日期后,计算两个时间戳。

日期.setDate MDN
日期.getDate MDN

我已将其包含在一个函数中,以便您可以进行测试。

在这里我们检查是否 ((date1 - date2) < 259200000)(Unix 时间戳中的 3 天)

 function isItGreaterThan(date1, date2, days) { var firstDate = new Date(date1); var secondDate = new Date(date2); var time = days * 60 * 60 * 24 * 1000 if ((secondDate.getTime() - firstDate.getTime()) < time) { console.log({dateCheck: `Not greater than ${days} days`}); } else { console.log({dateCheck: `Greater than ${days} days`}); } } isItGreaterThan('10/01/2019', '10/02/2019', 3); isItGreaterThan('10/01/2019', '10/03/2019', 3); isItGreaterThan('10/01/2019', '10/04/2019', 3); isItGreaterThan('10/01/2019', '10/02/2019', 10); isItGreaterThan('10/01/2019', '10/03/2019', 10); isItGreaterThan('10/01/2019', '10/14/2019', 10);

对于这么多不同的Date用法,我建议使用dateFns DateFns是日期对象 JS 库,具有许多不同的可用date操作方法。 参考: DateFns

您也可以格式化使用不同格式的日期format从库

为此,我建议addDays从方法dateFns

 const secondDate = '04/04/2019', firstDate = '04/01/2019' alert(new Date(secondDate) >= dateFns.addDays(new Date(firstDate), 3))
 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.min.js"></script>

也许您可以定义一个辅助函数来解析您的输入日期字符串,以便您可以像这样应用 3 天偏移量来执行每个日期之间的比较:

 var firstDate = '10/01/2019' var secondDate = '10/04/2019' /* Define helper function to parse input date string and return the date as milliseconds since epoch time, whihch gives us an easy format to compare offset dates */ function parseDate(str) { /* Break input string into date parts */ const parts = str.split('/').map(p => parseInt(p)); /* Create date object and populate parts */ const date = new Date(); date.setTime(0); date.setDate(parts[0]); date.setMonth(parts[1] - 1); date.setFullYear(parts[2]); /* Return date in milliseconds */ return date.getTime() } /* If first input date + 3 days (in milliseconds) is less than second input date, then second date is not greater than 3 days since first date */ if (parseDate(firstDate) + (86400000 * 3) < parseDate(secondDate)) { console.log('Not greater than 3 days'); } else { console.log('Greater than 3 days'); }

从第二个日期减去 3 天并检查是否仍然大于第一个日期。

 var firstDate = '10/01/2019'; var secondDate = '10/04/2019'; var thirdDate = '11/01/2019'; // this is to test. const pastThreeDays = (firstDate, secondDate) => { // Time is measured in milliseconds, so lets create a variable for a day. const day = 1000 * 60 * 60 * 24; let fDate = new Date(firstDate); let sDate = new Date(secondDate); sDate = new Date(sDate.getTime() - (3 * day)); console.log(`${fDate} - ${sDate}`); // If sDate is still greater than fDate after subtracting 3 days then we are past three days. return fDate.getDate() < sDate.getDate(); }; console.log(pastThreeDays(firstDate, secondDate)); console.log(pastThreeDays(firstDate, thirdDate));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM