确定当前日期与javascript中“billingdate”之间的天数

时间:2013-12-20 09:11:27

标签: javascript

对于我的网站,我需要计算当前日期和之前(因此不是下一个)所谓的结算日期之间的天数(固定的年度日期(例如,固定的日期和月份),将账单发送给客户)在javascript中。从数据库检索的开票日期是一个字符串,其年份值不相关。另请注意,在下面的示例中,结算日期的月份日是在当前日期的月 - 日之前,但也可能是在当前日期之后

所以我有:

var nrofdays; //since last billing date

var currentdate = new Date();

var billingdate = '2010-06-23'; //year value is is not relevant

我熟悉Date的方法,但我仍然很难以优雅的方式编写代码。有什么建议吗?

4 个答案:

答案 0 :(得分:0)

Math.floor((Date.now() - new Date("2010-6-23")) / (1000 * 60 * 60 * 24))

但要小心,Javascript月份的范围是0到11.所以第6个月是7月。

答案 1 :(得分:0)

var currentdate = new Date();

var billingdate = "2010-06-23";    

function delta(date1, date2) {
    return (date2 - date1)/(1000*60*60*24)
}
function parseDate(input) {
  var parts = input.split('-');
  return new Date(parts[0], parts[1]-1, parts[2]);
}

var days = Math.floor( delta(parseDate(billingdate), currentdate )  );
alert( days );

答案 2 :(得分:0)

您可以尝试以下

function parseBillDate(dateString) {
    var dateStringArr = dateString.split('-');
    var currentDate = new Date();
    return new Date(currentDate.getFullYear(), dateStringArr[1] - 1, dateStringArr[2]);
}

function dayDiffInDays(dateOne, dateTwo) {
    return (dateOne-dateTwo)/(1000*60*60*24);
}

var billDate = '2010-06-23';
var diffInDays = dayDiffInDays(parseBillDate(billDate), new Date());

parseBillDate :解析帐单日期并将年份设置为当前年度

dayDiffInDays :将差异从毫秒转换为天

答案 3 :(得分:-1)

您可以将小时设置为0,仅使相关天数。并将年份设置为任何一年,只要它们是相同的,它将起作用。你必须做一些逻辑来确定哪个日期更早。

function rangeDates(d1, d2) {

  var oneDay = 24*3600*1000;
  var dayCount = 0,
     ms = d1*1;
  for (last=d2*1; ms < last; ms+=oneDay) {
    dayCount++;
  }
  return dayCount;

}

var d2 = new Date(),
    d1 = new Date('2010-06-23');

    d2.setHours(0,0,0,0);
    d1.setHours(0,0,0,0);
    d2.setFullYear(1995);
    d1.setFullYear(1995); // party like its 1995

var dates = rangeDates(d1,d2);
console.log(dates);

Fiddle