我真的需要一些JS时间计算的帮助。
基本上我需要计算两个日期之间每月一天发生的次数。
例如 -
2014年2月1日至2014年5月14日的第15个月日期为3 2014年2月1日至2014年5月16日期间的第15个月日期为4
我看过Jquery图书馆,但它估计一个月是30天,所以我不准确并考虑到闰年 - 28天等的月份......
它确实需要准确,因为它用于计费事件计算。这些日期可以多年使用,因此可能因为30天的事情而导致不公正。
任何帮助将不胜感激
答案 0 :(得分:2)
在Javascript Date构造函数中有一种稍微违反直觉的行为,如果您创建一个日期设置为0的新日期,它将假定该月的最后一天。您可以使用以下函数获取一个月内的天数:
function daysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}
Javascript日期对象具有闰年意识,因此您可以可靠地使用此功能。
然后,您只需计算开始日期和结束日期之间的月数,并检查每一个月,以确保当月数字实际存在。如果日期小于或等于28,您可以将此检查短路。
答案 1 :(得分:2)
可能有一百万种方法可以做到这一点......这是一种蛮力的方式:
// add a "addDays() method to Date"
Date.prototype.addDays = function(days)
{
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
}
// provide two dates and a day ordinal you want to count between the two
function numOrdinalsBetweenDts(Date1, Date2, theOrdinal) {
var temp;
if(Date2 < Date1) { // put dates in the right order (lesser first)
temp = Date1;
Date1 = Date2;
Date2 = temp;
}
var workDate = Date1;
var ctr = 0;
while(workDate < Date2) { // iterate through the calendar until we're past the end
if(workDate.getDate() == theOrdinal) // if we match the ordinal, count it
ctr++;
workDate = workDate.addDays(1); // move the calendar forward a day
}
return ctr;
}
var result = numOrdinalsBetweenDts(new Date("July 21, 1901"), new Date("July 21, 2014"), 2);
console.log(result);
alert(result);