我有两个日期选择器,我可以从中计算星期六和星期日的天数。但我想在周五和周六这样做。我尝试了一些不同的方法但失败了。我很容易处理星期六和星期日之外的天数,但不是星期五和星期六。以下是我的javascript代码 -
$(function() {
$( "#startDate" ).datepicker({
onSelect: calculateDays});
});
$(function() {
$( "#endDate" ).datepicker({
onSelect: calculateDays});
});
function calculateDays(startDate, endDate) {
var form = this.form
var startDate = document.getElementById("startDate").value;
var startDate = new Date(startDate);
var endDate = document.getElementById("endDate").value;
var endDate = new Date(endDate);
startDate.setHours(0,0,0,1); // Start just after midnight
endDate.setHours(23,59,59,999); // End just before midnight
var oneDay = 24*60*60*1000;
var diff = endDate - startDate; // Milliseconds between datetime objects
var days = Math.ceil(diff / oneDay);
var weeks = Math.floor(days / 7);
var days = days - (weeks * 2);
// Handle special cases
var startDay = startDate.getDay();
var endDay = endDate.getDay();
// Remove weekend not previously removed.
if (startDay - endDay > 1)
days = days - 2;
// Remove start day if span starts on Sunday but ends before Saturday
if (startDay == 0 && endDay != 6)
days = days - 1
// Remove end day if span ends on Saturday but starts after Sunday
if (endDay == 6 && startDay != 0)
days = days - 1
if (days)
document.getElementById("result").innerHTML=days;
}
我的HTML是:
<form id="dateDifference" style="width:200px;">
<input name="startDate" id="startDate" value="" >
<input name="endDate" id="endDate" value="" >
</form>
<span id="result"></span>
答案 0 :(得分:3)
// Count days from d0 to d1 inclusive, excluding Fridays and Saturdays
function calculateDays( d0, d1 )
{
var ndays = 1 + Math.round((d1.getTime()-d0.getTime())/(24*3600*1000));
var nsaturdays = Math.floor((ndays + d0.getDay()) / 7);
return ndays - 2*nsaturdays + (d0.getDay()==6) - (d1.getDay()==5);
}
其中d0
和d1
是开始和结束Date
个对象(具有相同的小时值)。
答案 1 :(得分:2)
另一种方法。
for(var i = startDate ; i <= endDate ;i.setDate(i.getDate() + 1)){
if( i.getDay() != 6 && i.getDay() != 0)
{
days = days + 1;
}
}
除了周六和周日之外,它会给你一些天数
答案 2 :(得分:0)
javascript日期方法,getDay()将返回0表示星期日,1表示星期一,等等。
您应该能够使用日期对象并检查当周的当天,并将其从5(星期五)和6(星期六)的计数中排除。
答案 3 :(得分:0)
如果您想计算一年中的工作日数:
const monthWorkDays = (year, month) =>
new Array(32 - new Date(year, month, 32).getDate())
.fill(1)
.filter(
(id, index) =>
[0, 6].indexOf(
new Date(year, month, index + 1).getDay()) === -1
).length;
const yearWorkDays = (year) =>
new Array(12)
.fill(1)
.reduce((pv, cv, index) => pv + monthWorkDays(year, index), 0);
yearWorkDays(2017)