我有一些代码可以使用moment.js(这是一个要求)获得本月的第一个工作日,如下所示:
dateStart: function() {
var first = moment().startOf('month');
switch(first.day()) {
case 6:
return first.add(2, 'days');
case 0:
return first.add(1, 'days');
default:
return first;
};
}
有更好的方法吗?
答案 0 :(得分:2)
如果第一天是星期日或星期六(first.day() % 6 === 0
),则返回下一个星期一(first.day(1)
):
function dateStart() {
var first = moment().startOf('month');
return first.day() % 6 === 0 ? first.add(1, 'day').day(1) : first;
}
如评论first.day(1)
中所述,可以在上个月返回星期一。如果该月的第一天是星期六,则可能发生这种情况。为了确保你从当月的一周中获得星期一,只需在周末加1即可。
答案 1 :(得分:1)
尝试使用此:
const currentDate = moment(Date.now);
const dayOfMonth = currentDate.date();
const dayOfWeek = currentDate.weekday();
//check if its the first 3 days of the month
if (dayOfMonth >= 1 && dayOfMonth <= 3) {
//check if its the first of the month and also a weekday
if (dayOfMonth === 1 && dayOfWeek >= 1 && dayOfWeek <= 5) {
//set your conditions here
}
//check if its the 2nd/3rd of the month and also a weekday, if the the 1st/2nd was //on a weekend
if ((dayOfMonth === 2 || dayOfMonth === 3) && dayOfWeek === 1) {
//set your conditions here
}
}
答案 2 :(得分:0)
有趣的问题。我想你只需要在这个月的第一天,然后再添加几天,直到这一天是一个工作日。看看:https://jsfiddle.net/4rfrg4c0/2/
function get_first_working_day (year, month) {
// get the first day of the specified month and year
var first_working_day = new moment([year, month])
// add days until the day is a working day
while (first_working_day.day() % 6 == 0) {
first_working_day = first_working_day.add(1, 'day')
}
// return the day
return first_working_day
}
// tests
$('.september').append(get_first_working_day(2016, 8).format('dddd, MMMM Do YYYY'))
$('.october').append(get_first_working_day(2016, 9).format('dddd, MMMM Do YYYY'))
答案 3 :(得分:0)
对不起,但您的解决方案都不令人满意 如果您要下个月的第一个星期一=月份+1。 这样做(但是您可以使用xxx转换吗?zzz:yyy;符号,为了便于阅读,我将其保留为经典)
let first = moment().startOf('month').add(1, 'month');
let day = first;
if ( first.day() > 1 ) {
day = first.add(8 - first.day(), 'day');
}
if ( day.day() === 0 ) {
day = day.add(1, 'days');
}
date = day.format('YYYY-MM-DD');