在Javascript

时间:2017-11-22 13:57:37

标签: javascript

我试图计算两个动态日期之间的天数。

我有一个产品,在第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,但我找不到如何使用这样的动态日期。

2 个答案:

答案 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。它还可以使代码更加干净:

&#13;
&#13;
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;
&#13;
&#13;