javascript 根据连续两周计算两个日期之间的特定天数

h9a6wy2h  于 2022-12-02  发布在  Java
关注(0)|答案(1)|浏览(107)

我正在创建一个计划交付系统。
我编写了以下脚本,该脚本以dd/mm/yyyy格式(英国)计算两个日期之间的一周中特定日期的数量。

var date0 = "01/02/2021";
var date1 = "31/01/2022";
var dayList = [1]; // Monday based on Sunday being 0
    
var test = countDays(dayList,parseDate(date0),parseDate(date1));
alert(test);
            
function parseDate(str) {
    var dmy = str.split('/');
    return new Date(+dmy[2],dmy[1] - 1,+dmy[0]);    
}           
            
function countDays(days,fromDate,toDate) {
    var ndays = 1 + Math.round((toDate-fromDate)/(24*3600*1000));
    var sum = function(a,b) {
        return a + Math.floor((ndays+(fromDate.getDay()+6-b)%7)/7);
    };
    return days.reduce(sum,0);
}

在这个特定示例中,dayList=[1]是'Monday'。脚本计算两个日期之间星期一的数量,我们得到的结果是53(因为01/02/2021福尔斯星期一)。
如果我想根据滚动周找出两个日期之间有多少个星期一,这将非常有效。
我如何修改它以允许滚动两周?
例如,我可能想找出基于连续两周(而不是连续一周)的每周周一和每隔一周的周五有多少个,我必须考虑每周和每两周交货的混合。
例如:在这种情况下,客户希望每周一交付一次,每隔一个周五交付一次额外的交付。

Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri 
         x                           x               x

日程变化很大。滚动的两周从用户提供的开始日期开始。
我正在寻找的是开始和结束日期之间的总天数,但我正在努力考虑“滚动两周”方面的问题。

zpgglvta

zpgglvta1#

我认为您可以获得日期之间的日期名称,然后使用reduce来计算每个日期出现的次数,然后使用它来计算有多少次递送:

const start = new Date('2022-11-17T03:24:00');
const endDate = new Date('2022-12-31T03:24:00');

const getDaysBetweenDates = function*(s, e) {
  let currentDate = s;
  
  while (currentDate < e) {
    yield currentDate.toLocaleDateString("en-us", { weekday: 'long' });
    currentDate = new Date(currentDate.getTime() + (24 * 60 * 60 * 1000));
  }
}

const result = Array.from(getDayAndDatesBetweenDates(start, endDate))
  .reduce((p, c) => ({
    ...p,
    [c]: (p.hasOwnProperty(c) ? p[c] + 1 : 1)
  }), {});

console.log(result.Monday + Math.floor(result.Friday / 2));

相关问题