我有一系列日期
date_array = ["date1", "date2", "date3"]
我想打印
Tuesday: Yes
Wednesday: No
Thursday: No
Friday: Yes
Saturday: No
Sunday: Yes
其中,是和否取决于当前工作日的date_array
中是否有日期,工作日的顺序应从今天的工作日开始。
我正在使用moment
,其中工作日编号可以使用e
格式化,因此我使用moment().format('e')
获取今天工作日的编号。或者,它可以是moment().day()
,其中sunday = 0。
我想我可以做点像
// Existing dates
var dates = [moment(), moment().add(3, 'days'), moment().add(5, 'days')]
// All weekdays to print
var weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
// Reorder
var today_weekday = moment().day()
var weekdays_reordered = weekdays.splice(today_weekday).concat(weekdays)
// Print
weekdays_reordered.map((weekday, i) => {
console.log(weekday + ': ' + (dates.some(date => date.day() === i) ? 'Yes' : 'No'));
});

<script src="https://momentjs.com/downloads/moment.min.js"></script>
&#13;
但我不确定如何让它发挥作用。
答案 0 :(得分:0)
如果我理解正确,你需要每天打印从当天到本周末,即星期日?然后,您需要将today_weekday
设置为moment().day() - 1
(因为索引),然后在到达星期一时退出循环(将其从map()
更改为for()
,因为你不能突破地图)。最后,将格式化为dddd
的日期(工作日名称)与循环中的当前工作日元素进行比较。像这样:
var dates = [moment(), moment().add(4, 'days'), moment().add(5, 'days')]
// All weekdays to print
var weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
// Reorder
var today_weekday = moment().day() - 1;
var weekdays_reordered = weekdays.splice(today_weekday).concat(weekdays)
for(var i = 0; i < weekdays_reordered.length; i++) {
var weekday = weekdays_reordered[i];
if (weekday === "Monday" && i !== 0) break;
console.log(weekday + ': ' + (dates.some(date => date.format("dddd") === weekday) ? 'Yes' : 'No'));
}
&#13;
<script src="https://momentjs.com/downloads/moment.js"></script>
&#13;
答案 1 :(得分:-1)
假设您有一组日期而不是时刻对象,您可以为今天创建一个日期,然后检查数组中是否有相同的日期。然后逐步完成一周的日子。测试日期相等性有点棘手但如果它们都是为00:00:00创建的,那么你只需要检查时间值。
var base = new Date();
base.setHours(0,0,0,0);
var seed = new Date(+base);
// Array of dates for today, today + 2 days, today + 4 days
var dates = [new Date(seed),
new Date(seed.setDate(seed.getDate() + 2)),
new Date(seed.setDate(seed.getDate() + 2))
];
// Test 7 days, starting from today
for (var i=7; i; --i) {
// Get weekday name in host default language
var s = base.toLocaleString(undefined, {weekday:'long'}) + ': ';
// See if there's a matching date
s += dates.find(d=>+d == +base)? 'Yes':'No';
// Add 1 to the date
base.setDate(base.getDate() + 1);
// Do something with the result
console.log(s);
}
&#13;
上述内容需要Array.prototype.find,如果需要,还需要polyfill on MDN。如果您只想比较没有时间的日期,则可能需要定义不同的比较(谓词)函数。