gpt4 book ai didi

Javascript 跨周和跨月获取数组中的连续日期

转载 作者:行者123 更新时间:2023-11-28 04:54:05 25 4
gpt4 key购买 nike

我有一个包含以下值的数组(示例):

[
1491408000000,
1491494400000,
1491753600000,
1493222400000,
1493308800000,
1493568000000
]

其中索引是日期时间。日期时间始终为日期的 12:00:00。

在此示例中,前 3 个日期是连续的跨周末(周末是假期,因此算作休假),然后另一组 3 个日期跨周末和月份。

现在,我想做的是找到连续的日期(跨周和跨月)并将它们放入数组中,如下所示:

[
1491408000000,
1491494400000,
1491753600000
],
[
1493222400000,
1493308800000,
1493568000000
]

我尝试使用以下代码来获取连续日期,但这不能跨越周和月,如何修改代码以获得上述结果?任何帮助将不胜感激!

var timeValue = new Date(dateReview).getTime(); 
valueCon.push(timeValue);

var k = 0;
sortedValue[k] = [];

valueCon.sort( function ( a, b ){
return +a > +b ? 1 : +a == +b ? 0: -1;
})
.forEach( function( v , i ){
var a = v,b = valueCon[i+1]||0;

sortedValue[k].push( +a );

if ( (+b - +a) > 86400000) {
sortedValue[++k] = []
}
return 1;
});

sortedValue.sort( function ( a,b ){
return a.length > b.length ? -1: 1;
});

最佳答案

这需要函数的帮助来测试两个日期是否在同一周。下面将检查数组中提供的一组时间值,并将第一个值放入数组中的一个数组中。对于每个后续值,它测试它是否与外部数组中每个数组中的第一个值在同一周。

如果它与任何现有数组中的第一个值在同一周,则会将其插入该数组中。否则,它会被放入一个新数组中并推送到外部数组中。

可能有一种更简洁的方法来实现该算法,但我将其留给其他人。

由于时区差异,会根据源时区中午的原始时间值调整为主机时区。

// Given 2 dates, return true if they are in the same week (Mon to Sun).
// Otherwise, return false
function sameWeek(a, b){
var e = new Date(+a);
// Week starts at 00:00:00.000 on Monday on or before date
var s = new Date(e.setDate(e.getDate() - ((e.getDay()||7) -1)));
s.setHours(0,0,0,0);
// Week ends at 23:59:59.999 the following Sunday
e.setDate(e.getDate() + 6);
e.setHours(23,59,59,999);
// Test b and return value
return b >= s && b <= e;
}

// Given time value for UTC-0400, adjust to same date and time
// in local time zone and return a date
function adjust(n) {
var d = new Date(n);
d.setMinutes(d.getMinutes() - 240 + d.getTimezoneOffset());
return d;
}

var result = [1491408000000,1491494400000,1491753600000,1493222400000,1493308800000,1493568000000
].reduce(function(acc, n) {
var d = adjust(n);
var used;
if (acc.length != 0) {
used = acc.some(function(arr) {
if (sameWeek(adjust(arr[0]), d)) {
arr.push(n);
return true;
}
});
}
if (!used || acc.length == 0) {
acc.push([n]);
}
return acc;
},[]);

// Result array
console.log(result);

// Printed as date strings adjusted to same host local time
result.forEach(arr => {
arr.forEach(n => console.log(adjust(n).toString()))
console.log('\n');
});

关于Javascript 跨周和跨月获取数组中的连续日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42686797/

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