我想知道两个日期之间有多少个周六和周日。
我从输入日期字段中获取第一个日期
<input value="" type="date" name="exit_end_document" id="exit_end_document" class="form-control" required>我的Javascript是:
var fromDate = $('#exit_end_document').val();我正在获取值..问题是,我不知道如何计算从输入日期字段获得日期和今天之间的日期。
我见过很多例子,但没有一个是这样做的。
(输入日期字段) 2019-03-01至(此日期直接来自JS) 2019-03-05结果=2
谢谢!
发布于 2019-03-06 05:13:11
为了处理闰年、时区和诸如此类的事情,我建议测试所有的日期间隔,并测试它们,看看它们是周六还是周日:
var date1 = new Date("2012-06-04T05:00:00.000Z");
var date2 = new Date("2012-08-17T05:00:00.000Z");
var weekendDays = 0;
for(var i = +date1, mx = +date2; i<mx; i+=(1000*60*60*24)){
if({0:1,6:1}[new Date(i).getDay()]) weekendDays++;
}
alert(weekendDays); // 20发布于 2019-03-06 05:15:53
让我们对此进行数学分析。
开始日期可以是星期六,也可以不是星期六。同样,结束日期可以是星期六,也可以不是星期六。在最简单的情况下,两个日期都在星期六;那么您可以清楚地看到星期六的数量等于1加上两个日期之间的周数。
从这里很容易看出,如果开始日期是星期六,但结束日期不是,那么星期六的数量等于1加上两个日期之间的周数,因为结束日期的周还没有到达星期六。事实证明,同样的数学方法也适用于第一个示例,因为日期之间的周数是整数。因此,我们只需使用1 + floor(weeks_between_dates)就可以涵盖这两个示例。
如果结束日期是星期六,但开始日期不是,该怎么办?事实证明,数学仍然是一样的!这与将开始日期从其星期六“移回”相同,这将增加一个部分周,直到它到达前一个星期六。这些部分周被四舍五入,一旦它到达前一个星期六,你将无论如何加1,因为这将是一个完整的周的差额!所以我们和1 + floor(weeks_between_dates)的关系还是不错的。
因此,剩下的唯一可能的组合是两个日期,都不是星期六。这是最复杂的可能性。让我们从简单的开始,假设日期是两个连续的星期三。然后他们相隔一周,两个人之间有一个星期六。很简单。如果他们相隔两周,他们就有两个星期六。但是如果是星期三和下个星期二呢?还有不到一周的时间,但他们之间还有一个星期六。如果是周三和下周四呢?一个多星期,但仍然是一个星期六!因此,在这种情况下,我们想要向上舍入周数,并在此停止,得到ceil(weeks_between_dates)。但是如果它们都在同一周--例如,同一周的星期一和星期五--那么答案就是0。那么,我们如何知道这几天是否属于同一周呢?假设它们已排序,并且开始日期总是在结束日期之前,则当且仅当它们之间的间隔少于1周,并且开始工作日在结束工作日之前时,它们才在同一周内。
所以这里的直接条件逻辑是这样的(用伪代码):
weeks_between = floor((days between start and end) / 7)
if start.weekday = Saturday or end.weekday = Saturday, then:
return 1 + weeks_between
else if weeks_between = 0 and start.weekday is before end.weekday, then:
return 0
else
return ceil((days between start and end) / 7)发布于 2019-03-06 05:33:43
我已经找到了解决方案,它来自@zak:
var fromDate = $('#exit_end_document').val();
fromDate = new Date(fromDate);
toDate = new Date();
var weekendDays = 0;
dayMilliseconds = 1000 * 60 * 60 * 24;
date1 = fromDate;
date2 = toDate;
while (date1 <= date2) {
var day = date1.getDay();
if (day == 0 || day == 6) {
weekendDays++;
}
date1 = new Date(+date1 + dayMilliseconds);
}
alert(weekendDays);https://stackoverflow.com/questions/55011234
复制相似问题