对于我的网站,我需要计算当前日期和之前(因此不是下一个)所谓的结算日期之间的天数(固定的年度日期(例如,固定的日期和月份),将账单发送给客户)在javascript中。从数据库检索的开票日期是一个字符串,其年份值不相关。另请注意,在下面的示例中,结算日期的月份日是在当前日期的月 - 日之前,但也可能是在当前日期之后
所以我有:
var nrofdays; //since last billing date
var currentdate = new Date();
var billingdate = '2010-06-23'; //year value is is not relevant
我熟悉Date的方法,但我仍然很难以优雅的方式编写代码。有什么建议吗?
答案 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);