我试图计算两个动态日期之间的天数。
我有一个产品,在第19天更新积分,我想向用户显示续订它们的天数。
我尝试过这段代码并没有成功:如果今天是11月22日,那么这段代码返回的结果是负数,当它返回时#27; 27"从今天到12月19日之间有27天。
var today = new Date();
var todayMonth = today.getMonth()+1;
if(todayMonth<10) todayMonth = 0+todayMonth;
var datetwo = new Date(today.getFullYear()+"-"+todayMonth+"-19T00:00:00.000Z");
var dayDif = (datetwo - today) / 1000 / 60 / 60 / 24;
dayDif = Math.ceil(dayDif);
var daysLeftRenew = dayDif;
我也试过Moment.js,但我找不到如何使用这样的动态日期。
答案 0 :(得分:0)
如果今天是11月22日,此代码返回的结果是a 负数,当它应该返回“27”,因为有27天 从今天到12月19日。
您需要更改此行
var todayMonth = today.getMonth()+1;
到
var todayMonth = today.getMonth()+2;//2 instead of 1 as getMonth will give value starting from 0 to 11.
因为您要在字符串格式中设置月份参数,所以它将采用month参数。
<强>演示强>
var today = new Date();
var todayMonth = today.getMonth() + 2;
if (todayMonth < 10) todayMonth = 0 + todayMonth;
var datetwo = new Date(today.getFullYear() + "-" + todayMonth + "-19T00:00:00.000Z");
var dayDif = (datetwo - today) / 1000 / 60 / 60 / 24;
dayDif = Math.ceil(dayDif);
var daysLeftRenew = dayDif;
console.log(daysLeftRenew);
答案 1 :(得分:0)
日期操作可能很棘手,您可以考虑使用专用库进行此类计算,例如moment.js。它还可以使代码更加干净:
var targetDate = moment().date(19);
if (targetDate.isBefore(moment())) {
targetDate.add(1, 'month');
}
console.log(targetDate.endOf('day').fromNow());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.2/moment.min.js"></script>
&#13;