mar*_*arv 7 javascript datetime
我有两组代码可以工作.需要帮助将它们合二为一.
这段代码让我了解两个日期之间的区别.完美的工作:
function test(){
var date1 = new Date(txtbox_1.value);
var date2 = new Date(txtbox_2.value);
var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));
var days = Math.floor(diff/(24*60*60));
var leftSec = diff - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
txtbox_3.value = days + "." + hrs; }
Run Code Online (Sandbox Code Playgroud)
@cyberfly下面的代码似乎有了排除sat和sun这个我需要的答案.来源.但是,它在jquery和上面的代码是在JS中.因此,需要帮助结合,因为我缺乏知识:(
<script type="text/javascript">
$("#startdate, #enddate").change(function() {
var d1 = $("#startdate").val();
var d2 = $("#enddate").val();
var minutes = 1000*60;
var hours = minutes*60;
var day = hours*24;
var startdate1 = getDateFromFormat(d1, "d-m-y");
var enddate1 = getDateFromFormat(d2, "d-m-y");
var days = calcBusinessDays(new Date(startdate1),new Date(enddate1));
if(days>0)
{ $("#noofdays").val(days);}
else
{ $("#noofdays").val(0);}
});
</script>
Run Code Online (Sandbox Code Playgroud)
编辑 尝试组合代码.这是我的样本.获得对象预期错误.
function test(){
var date1 = new Date(startdate.value);
var date2 = new Date(enddate.value);
var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));
var days = Math.floor(diff/(24*60*60));
var leftSec = diff - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
var startdate1 = getDateFromFormat(startdate, "dd/mm/yyyy hh:mm");
var enddate1 = getDateFromFormat(enddate, "dd/mm/yyyy hh:mm");
days = calcBusinessDays(new Date(startdate1),new Date(enddate1));
noofdays.value = days + "." + hrs; }
start: <input type="text" id="startdate" name="startdate" value="02/03/2015 00:00">
end: <input type="text" id="enddate" name="enddate" value="02/03/2015 00:01">
<input type="text" id="noofdays" name="noofdays" value="">
Run Code Online (Sandbox Code Playgroud)
Rob*_*obG 13
在确定两个日期之间的天数时,有很多关于什么是一天的决定.例如,2月1日至2月2日期间通常为一天,因此2月1日至2月1日为零天.
当增加仅计算工作日的复杂性时,事情变得更加艰难.例如,2015年2月2日星期一至2月6日星期五是4天过去了(星期一到星期二是1,星期一到星期三是2等),但是"星期一到星期五"这个词通常被视为5个工作日,持续时间为星期一2 2月2日至2月7日也应该是4个工作日,但周日到周六应该是5个工作日.
所以这是我的算法:
最后的步进部分可能会被其他一些算法取代,但它永远不会循环超过6天,因此它是一个简单而合理有效的解决不平衡周数的问题.
以上的一些后果:
这是代码:
// Expects start date to be before end date
// start and end are Date objects
function dateDifference(start, end) {
// Copy date objects so don't modify originals
var s = new Date(+start);
var e = new Date(+end);
// Set time to midday to avoid dalight saving and browser quirks
s.setHours(12,0,0,0);
e.setHours(12,0,0,0);
// Get the difference in whole days
var totalDays = Math.round((e - s) / 8.64e7);
// Get the difference in whole weeks
var wholeWeeks = totalDays / 7 | 0;
// Estimate business days as number of whole weeks * 5
var days = wholeWeeks * 5;
// If not even number of weeks, calc remaining weekend days
if (totalDays % 7) {
s.setDate(s.getDate() + wholeWeeks * 7);
while (s < e) {
s.setDate(s.getDate() + 1);
// If day isn't a Sunday or Saturday, add to business days
if (s.getDay() != 0 && s.getDay() != 6) {
++days;
}
}
}
return days;
}
Run Code Online (Sandbox Code Playgroud)
Dunno如何与jfriend00的答案或您引用的代码进行比较,如果您希望期间具有包容性,只需在开始日期或结束日期为工作日时添加一个.
这是一个简单的函数,用于计算两个日期对象之间的工作日数。按照设计,它不计算开始日,但计算结束日,因此如果您为其指定一周的星期二和下一周的星期二的日期,它将返回 5 个工作日。这不考虑节假日,但在夏令时变化期间可以正常工作。
function calcBusinessDays(start, end) {
// This makes no effort to account for holidays
// Counts end day, does not count start day
// make copies we can normalize without changing passed in objects
var start = new Date(start);
var end = new Date(end);
// initial total
var totalBusinessDays = 0;
// normalize both start and end to beginning of the day
start.setHours(0,0,0,0);
end.setHours(0,0,0,0);
var current = new Date(start);
current.setDate(current.getDate() + 1);
var day;
// loop through each day, checking
while (current <= end) {
day = current.getDay();
if (day >= 1 && day <= 5) {
++totalBusinessDays;
}
current.setDate(current.getDate() + 1);
}
return totalBusinessDays;
}
Run Code Online (Sandbox Code Playgroud)
并且,演示的 jQuery + jQueryUI 代码:
// make both input fields into date pickers
$("#startDate, #endDate").datepicker();
// process click to calculate the difference between the two days
$("#calc").click(function(e) {
var diff = calcBusinessDays(
$("#startDate").datepicker("getDate"),
$("#endDate").datepicker("getDate")
);
$("#diff").html(diff);
});
Run Code Online (Sandbox Code Playgroud)
而且,这是一个使用 jQueryUI 中的日期选择器构建的简单演示:http://jsfiddle.net/jfriend00/z1txs10d/