美好的一天,我想计算到期日和当前日期之间的剩余天数,但似乎回报不是我的预期。
function expiryDate(date_string) {
var date = date_string.split("/");
var year = parseInt(date[2]);
var day = parseInt(date[1]);
var month = parseInt(date[0]);
var expiration = new Date(month,day,year);
var d = new Date();
var curr_day = d.getDate();
var curr_month = d.getMonth()+1;
var curr_year = d.getFullYear();
var current_date = new Date(curr_month, curr_day, curr_year);
return (expiration - current_date) / (1000*60*60*24);
}
如果日期相同,上面的代码将返回正确的剩余天数..当前日期字符串 05/01/2018 ,到期时间也相同,它将返回0,但是当我将有效期限移动到1天时,如05/02/2018,则返回28天,这是不正确的。
如何解决此问题?
答案 0 :(得分:1)
Date
对象使用从零开始的月份,其中1月为0,2月为1,等等。您似乎已经尝试在一个地方进行补偿,但方式错误。
您需要像这样修复此行:
var month = parseInt(date[0]) - 1;
这一行是这样的:
var curr_month = d.getMonth(); // No +1
当然,按照建议使用Moment.js也是一个好主意,但我想你可能想知道如何让你自己的代码工作。
答案 1 :(得分:1)
正如其他人所指出的那样,月份是零索引。此外,由于某些地方的夏令时,您将小时归零的方法并不总是按预期工作。但舍入结果将消除DST效应。
不需要库,您的解析功能和计算可以大大简化,您可以轻松地从以下内容中删除另一行:
/* @param {string} date_string - date in m/d/y format
** @returns {number} days between today and expiry
*/
function expiryDays(date_string) {
var b = date_string.split(/\D/);
var expiry = new Date(b[2],--b[0],b[1]);
return Math.round((expiry - new Date().setHours(0,0,0,0)) / 8.64e7);
}
console.log(expiryDays('8/23/2018'));
// Or if you like obfuscated code
var expires = s=>Math.round((new Date(...(s.split(/\D/).reduce((a,v,i) => {a[(i+1)%3] = (i==0? v-1 : v);return a},[]))) - new Date().setHours(0,0,0,0))/8.64e7);
console.log(expires('8/23/2018'));
答案 2 :(得分:0)
您可以使用momentjs的diff() function
来区分两个日期以下是工作代码:
function expiryDate(date_string) {
var expiration = moment(date_string).format("YYYY-MM-DD");
var current_date = moment().format("YYYY-MM-DD");
var days = moment(expiration).diff(current_date, 'days');
return days;
}
alert("Days remaining = " + expiryDate("2018-05-05"));
console.log("Days remaining = " + expiryDate("2018-05-05"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>
答案 3 :(得分:-1)
最初与时俱进有时会做很多工作,而且往往会投入大量时间,也许是时刻.js库可能会根据需要为您提供解决方案,特别是isBetween
点击以下链接。
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')