我想使用My代码创建的代码是an array of 7 objects
,如下所示:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
这objects
是7,因为它们表示一周中的每一天,如下所示,当7对象的数组展开时:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: {Mondays: Array(6)}
2: {Tuesdays: Array(6)}
3: {Wednesdays: Array(6)}
4: {Thursdays: Array(6)}
5: {Fridays: Array(6)}
6: {Saturdays: Array(6)}
我把每一天分成6 time ranges
天,即:
00:00 - 04:00,
04:00 - 08:00,
08:00 - 12:00,
12:00 - 16:00,
16:00 - 20:00 and finally
20:00 - 00:00.
...并将time ranges
分分配给每一天.时间以timestamp
格式保存.
为了清楚起见,我随机 Select 扩展Mondays
个对象,以说明我的意思:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: Mondays: Array(6)
0: {T_00:00_Start: 1702242000, T_04:00_End: 1702256400}
1: {T_04:00_Start: 1702256400, T_08:00_End: 1702270800}
2: {T_08:00_Start: 1702270800, T_12:00_End: 1702285200}
3: {T_12:00_Start: 1702285200, T_16:00_End: 1702299600}
4: {T_16:00_Start: 1702299600, T_20:00_End: 1702314000}
5: {T_20:00_Start: 1702314000, T_00:00_End: 1702328400}
.
.
.
以下体系 struct 表明,7天(一周)的持续时间已添加到天数组中:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: {Mondays: Array(6)}
2: {Tuesdays: Array(6)}
3: {Wednesdays: Array(6)}
4: {Thursdays: Array(6)}
5: {Fridays: Array(6)}
6: {Saturdays: Array(6)}
但是,如果今天是星期一,而持续时间是8天,则对象数组将如下所示(请注意,星期一现在包含的数组为12
,而不是6
):
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: {Mondays: Array(12)}
2: {Tuesdays: Array(6)}
3: {Wednesdays: Array(6)}
4: {Thursdays: Array(6)}
5: {Fridays: Array(6)}
6: {Saturdays: Array(6)}
如果我把这Mondays
个物体展开,它会显示出12
个物体.第一个6
代表今天(本周一),而下一个6
代表下一周的星期一,如下所示:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: Mondays: Array(12)
// Today (Current Monday)
0: {T_00:00_Start: 1702242000, T_04:00_End: 1702256400}
1: {T_04:00_Start: 1702256400, T_08:00_End: 1702270800}
2: {T_08:00_Start: 1702270800, T_12:00_End: 1702285200}
3: {T_12:00_Start: 1702285200, T_16:00_End: 1702299600}
4: {T_16:00_Start: 1702299600, T_20:00_End: 1702314000}
5: {T_20:00_Start: 1702314000, T_00:00_End: 1702328400}
// Monday the following week
6: {T_00:00_Start: 1702846800, T_04:00_End: 1702861200}
7: {T_04:00_Start: 1702861200, T_08:00_End: 1702875600}
8: {T_08:00_Start: 1702875600, T_12:00_End: 1702890000}
9: {T_12:00_Start: 1702890000, T_16:00_End: 1702904400}
10: {T_16:00_Start: 1702904400, T_20:00_End: 1702918800}
11: {T_20:00_Start: 1702918800, T_00:00_End: 1702933200}
.
.
.
如果今天又是Monday
,duration
是14
,意味着2 weeks
,那么 struct 应该是这样的:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(12)}
1: {Mondays: Array(12)}
2: {Tuesdays: Array(12)}
3: {Wednesdays: Array(12)}
4: {Thursdays: Array(12)}
5: {Fridays: Array(12)}
6: {Saturdays: Array(12)}
为什么我无法获得下面的代码来实现这一点?
我的代码失败是因为,如果您使用"8天"的持续时间,存储在每一天下的时间范围数组将显示超过"42个数组".
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(42)}
1: {Mondays: Array(84)}
2: {Tuesdays: Array(42)}
3: {Wednesdays: Array(42)}
4: {Thursdays: Array(42)}
5: {Fridays: Array(42)}
6: {Saturdays: Array(42)}
持续"8天"的期望输出应为:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(6)}
1: {Mondays: Array(12)}
2: {Tuesdays: Array(6)}
3: {Wednesdays: Array(6)}
4: {Thursdays: Array(6)}
5: {Fridays: Array(6)}
6: {Saturdays: Array(6)}
另一个例子是,以"14天或一周"为期限,期望的输出应为:
(7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {Sundays: Array(12)}
1: {Mondays: Array(12)}
2: {Tuesdays: Array(12)}
3: {Wednesdays: Array(12)}
4: {Thursdays: Array(12)}
5: {Fridays: Array(12)}
6: {Saturdays: Array(12)}
此外,存储在这些日期下的时间戳中的时间范围应该相对于父日期,我的代码无法实现这一点.
例如,请注意存储在星期四下的时间戳实际上都不表示星期四.
Thursdays: Array(42)
0: {T_00:00_Start: 1702242000, T_04:00_End: 1702256400}
1: {T_04:00_Start: 1702256400, T_08:00_End: 1702270800}
2: {T_08:00_Start: 1702270800, T_12:00_End: 1702285200}
3: {T_12:00_Start: 1702285200, T_16:00_End: 1702299600}
4: {T_16:00_Start: 1702299600, T_20:00_End: 1702314000}
5: {T_20:00_Start: 1702314000, T_00:00_End: 1702328400}
以下是我的代码,您可以在浏览器控制台中复制、粘贴和运行它们.
我的代码中的持续时间变量指的是durationOfCampaignInDays
:
const daysArrayDummy = ['Sundays', 'Mondays', 'Tuesdays', 'Wednesdays', 'Thursdays',
'Fridays', 'Saturdays'];
const startOfTheDay = moment().startOf("day");
const durationOfCampaignInDays = 8; // Replace with your actual variable
const updatedDaysArray = [];
for (let i = 0; i < daysArrayDummy.length; i++) {
const day = daysArrayDummy[i];
console.log(`Processing ${day}`);
const dailyTimeRanges = [];
const isSpecialDay = i === 1; // Adjust the condition based on the special days
const numberOfTimeRanges = isSpecialDay ? 12 : 6; // Adjust the number of time ranges
for (let j = 0; j < durationOfCampaignInDays; j++) {
const dayStart = moment(startOfTheDay).add(j, 'days').startOf("day");
for (let k = 0; k < numberOfTimeRanges; k++) {
const rangeStart = moment(dayStart).add(k * 4, 'hours');
const rangeEnd = moment(dayStart).add((k + 1) * 4, 'hours');
const startTimestamp = Math.floor(rangeStart.valueOf() / 1000);
const endTimestamp = Math.floor(rangeEnd.valueOf() / 1000);
const timestampKey = `${moment(rangeStart).format('T_HH:mm')}_Start`;
dailyTimeRanges.push({
[timestampKey]: startTimestamp,
[`${moment(rangeEnd).format('T_HH:mm')}_End`]: endTimestamp,
});
}
}
updatedDaysArray.push({ [day]: dailyTimeRanges });
}
// Log the updated daysArray
console.log('Updated daysArray: ', updatedDaysArray);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>