gpt4 book ai didi

javascript - 在 javascript 日期计算中排除周末

转载 作者:数据小太阳 更新时间:2023-10-29 04:26:13 24 4
gpt4 key购买 nike

我有两组有效的代码。需要帮助将它们合二为一。

这段代码让我知道两个日期之间的差异。完美运行:

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; }

source for the above code

@cyberfly 下面的代码似乎有排除 sat 和 sun 的答案,这正是我需要的。 source .但是,它在 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>

编辑尝试组合代码。这是我的样本。获取对象预期错误

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="">

最佳答案

在确定两个日期之间的天数时,需要做出很多关于什么是一天的决定。例如,2 月 1 日至 2 月 2 日期间通常为 1 天,因此 2 月 1 日至 2 月 1 日为零天。

再加上只计算工作日的复杂性,事情就会变得更加困难。例如。 Monday 2 Feb 2015 to Friday 6 February is 4 elapsed days (Monday to Tuesday is 1, Monday to Wednesday is 2, etc.), 然而表达“周一至周五”通常被视为5个工作日和持续时间Mon 2 Feb到 2 月 7 日星期六也应该是 4 个工作日,但星期日到星期六应该是 5 个工作日。

这是我的算法:

  1. 获取两个日期之间的总天数
  2. 除以 7 得到整周数
  3. 将周数乘以二得到周末天数
  4. 从整体中减去周末天数得到工作日
  5. 如果总天数不是偶数周,则将周数 * 7 添加到开始日期以获得临时日期
  6. 临时日期小于结束日期时:
  • 如果临时日期不是星期六或星期日,则加一个工作日
  • 在临时日期中添加一个
  1. 就是这样。

末尾的步进部分可能会被其他算法取代,但它永远不会循环超过 6 天,因此它是解决周数不均问题的简单且相当有效的解决方案。

上述的一些后果:

  1. 周一至周五为 4 个工作日
  2. 不同周中的任何一天到同一天都是偶数周,因此是 5 的偶数倍,例如2 月 2 日星期一至 2 月 9 日星期一和 2 月 1 日星期日至 2 月 8 日星期日为 5 个工作日
  3. 2 月 6 日星期五至 2 月 7 日星期日为零工作日
  4. 2 月 6 日星期五到 2 月 9 日星期一是一个工作日
  5. 2 月 8 日星期日至 2 月 15 日星期日、2 月 14 日星期六和 2 月 13 日星期五均为 5 个工作日

代码如下:

// 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;
}

我不知道它与 jfriend00 的答案或您引用的代码相比如何,如果您希望时间段包含在内,如果开始日期或结束日期是工作日,只需添加一个。

关于javascript - 在 javascript 日期计算中排除周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com