打印工作日并检查此工作日是否存在日期

时间:2017-09-05 16:12:30

标签: javascript arrays date momentjs

我有一系列日期

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;
&#13;
&#13;

但我不确定如何让它发挥作用。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你需要每天打印从当天到本周末,即星期日?然后,您需要将today_weekday设置为moment().day() - 1(因为索引),然后在到达星期一时退出循环(将其从map()更改为for() ,因为你不能突破地图)。最后,将格式化为dddd的日期(工作日名称)与循环中的当前工作日元素进行比较。像这样:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:-1)

假设您有一组日期而不是时刻对象,您可以为今天创建一个日期,然后检查数组中是否有相同的日期。然后逐步完成一周的日子。测试日期相等性有点棘手但如果它们都是为00:00:00创建的,那么你只需要检查时间值。

&#13;
&#13;
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;
&#13;
&#13;

上述内容需要Array.prototype.find,如果需要,还需要polyfill on MDN。如果您只想比较没有时间的日期,则可能需要定义不同的比较(谓词)函数。