如何在Javascript中找到两个日期之间的给定天数? [复制]

Posted

技术标签:

【中文标题】如何在Javascript中找到两个日期之间的给定天数? [复制]【英文标题】:How do I find the number of given days between two dates in Javascript? [duplicate] 【发布时间】:2013-05-09 02:48:24 【问题描述】:

我有两个任意日期,比如说 2012 年 4 月 1 日和 2013 年 1 月 15 日。我想计算这两个日期之间的星期日、星期一、星期二、星期三、星期四、星期五和星期六的数量。

有没有一种万无一失的快速方法来做到这一点而不会削弱用户的 CPU/浏览器?

谢谢

更新

这样做的前提是,对于一周中的任何一天,我们都有一个定义的平均事件数。我们需要计算在一个时间段内发生的事件数量,即使是部分事件(比如周日的 1/2 天将是添加到总数中的事件数量的一半)

【问题讨论】:

为什么要明确列出所有工作日?没有不想数的日子,是吗? 不,我想计算一周中的所有天数 :) 我发现在这里,最好明确说明您的需求。 我可以假设您的日期以毫秒为单位吗? 循环从那时到现在的天数,并增加一个包含各种天数的 json 对象。 一天不是有86400秒吗?自纪元以来的秒数不是很多 Unix 时间戳吗?这表明......减法和除法。 【参考方案1】:

好的,这是一个可能的未经测试的解决方案

date1 = new Date("2012-02-10");
date2 = new Date("2012-03-10");

daysInBetween = (date2.getTime() - date1.getTime())/1000/3600/24;

dayOfTheWeek1 = date1.getDay();

weeks = parseInt(daysInBetween/7, 10);
extraDays = daysInBetween%7;

你有weeks + 1dayOfWeek1 ... dayOfWeek1 + (6 - extraDays)

你有weeks + 1 + extraDaysdayOfWeek1 + (6 - extraDays) ... dayOfWeek1 + 6

请注意如果dayOfWeek1 === 6,那么我假设dayOfWeek1 + 1 === 0

编辑:

多一点代码:

var days = ;
var dayOfTheWeekEnd = dayOfTheWeek1 + 6 - extraDays; // no imagination for names...
if (dayOfTheWeekEnd < 6) 
  if (0 >= dayOfTheWeek1 && 0 <= dayOfTheWeekEnd) 
    days.sunday = weeks + 1;
   else 
    days.sunday = weeks + 1 + extraDays;
  
  // etc for the other days, a for loog with an i instead of the 0 would be better.
 else 
  // I have to go the school! I'll edit it later.
  // The idea is that you have to take dayOfTheWeekEnd back to the 0-6 range
  // and check if its after dayOfWeek1 or before dayOfTheWeekEnd, then days.sunday=weeks+1.

【讨论】:

感谢@Scott!答案已更改。 This answer 对 OP 的问题有很好的解决方案。 这让我非常接近 - 我需要为 dayOfWeek2、3、4、5、6 等每一天添加一个单独的行项目吗? 我建议你使用我在上面评论中标记的答案,但是是的,你可以创建一个方法来返回一个带有 0 天数的对象(我认为是星期天......), 1【参考方案2】:

经过深思熟虑...尚未对其进行测试,但希望对您有所帮助。

function(date1, date2) 
   // date1 is assumed to be 12:00:00 am and date2 is actually the date after target at 
   // 12:00:00 am to make the dates inclusive so from the example date1 = 2012/4/1 and
   // date2 = 2013/1/16
   var timeBetween = date2.getTime() - date1.getTime(); //milliseconds between
   var weeks = timeBetween/1000/60/60/24/7;
   var sun = weeks;
   var mon = weeks;
   var tue = weeks;
   var wed = weeks;
   var thu = weeks;
   var fri = weeks;
   var sat = weeks;

   date1.setTime(date1.getTime() + weeks*7*24*60*60*1000); //set the first date to x weeks later
   //if this iterates more than 7 times then something is wrong.
   while(date1.getTime() < date2.getTime())
       switch(date1.getDay())
           case 0:
                sun++;
                break;
           case 1:
                mon++;
                break;
           ...
        
        date1.setTime(date1.getTime() + 1000 * 60 * 60 * 24); //Move date 1 to the next date.
    

【讨论】:

以上是关于如何在Javascript中找到两个日期之间的给定天数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中显示两个给定日期之间的所有日期

如何计算两个给定日期之间的天数

如何在laravel项目中找到两个日期之间的结算金额

如何使用查询获取两个给定日期之间的月份列表?

如何在java中找到两个日期之间的差异持续时间?

JavaScript 中两个日期的年、月、日之间的差异