如何确定日期是否是周末在javascript中


80

如果我有一个要加入功能的日期,该如何确定是周末?


请注意,某些国家/地区将星期五和星期六作为周末(正如我在答案中提到的那样),因此答案应按国家/地区考虑周末。en.wikipedia.org/wiki/Workweek_and_weekend
Guy

Answers:


162
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0);    // 6 = Saturday, 0 = Sunday

9
d!= day:)我宁愿称呼它dayOfWeek,对OP来说更有意义。
BalusC,2010年

4
并非在所有时区都是如此。例如,在法国,一周的第一天将是星期一,而不是星期日。像Moment这样的现代图书馆对此做了补偿。
csvan 2015年

7
@csvan:getDay根据当前时区设置,周日应始终返回0,周六应始终返回6。(然后由OP根据他们的要求决定什么构成“周末”。)
LukeH 2015年

1
对于js,最好是这样做,===而不是==比较绝对值。不是关键,而只是最佳实践。
dylanh724


48
var isWeekend = yourDateObject.getDay()%6==0;

如果是星期六,这表示返回true
Gianfranco P.

13
0%6(星期日)和6%6(星期六)都具有0模数
肯尼伯

8
除了自愿混淆之外,我看不到这种技术的任何意义。我个人更喜欢LukeH的回答。在这种情况下,我们只能使用6而不是7的模来解决问题是偶然的。
亨利·拉皮耶尔

一些国家/地区将周五和周六作为周末
Guy

@Guy,那么问题是,是否.getDay()将导致另一个值,或者是否将定义isWeekend错误。如果关于变量,我不在乎。我想0永远是星期日,所以对我来说很好。
C4d

10

简短而甜美。

var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);


5

我尝试了正确答案,它在某些语言环境中有效,但不适用于所有语言环境:

在momentjs文档中:weekday 返回的数字取决于语言环境initialWeekDay,因此Monday = 0 | 星期日= 6

因此,我更改了逻辑以检查实际的DayString('Sunday')

const weekday = momentObject.format('dddd'); // Monday ... Sunday
const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';

这样,您就可以独立于语言环境。


一些国家/地区将周五和周六作为周末
Guy

@Guy您需要调整代码以满足国家/地区的需求。根据Wiki,您在其他一些国家/地区上方链接的周末只有一天。Some countries have adopted a one-day weekend, i.e. either Sunday only (in seven countries), Friday only (in Djibouti, Iran, Palestine and Somalia), or Saturday only (in Nepal).
T04435 '19

1

更新2020

现在有多种方法可以实现这一目标。

1)使用day方法从0到6取得天数:

const day = yourDateObject.day();
// or const day = yourDateObject.get('day');
const isWeekend = (day === 6 || day === 0);    // 6 = Saturday, 0 = Sunday

2)使用isoWeekday方法从1到7得出天数:

const day = yourDateObject.isoWeekday();
// or const day = yourDateObject.get('isoWeekday');
const isWeekend = (day === 6 || day === 7);    // 6 = Saturday, 7 = Sunday

.isoWeekday()是moment.js方法,但未指定。
NVRM

0
var d = new Date();
var n = d.getDay();
 if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");

0

我已经在这里测试了大多数答案,并且时区,语言环境或每周的开始时间是星期日还是星期一总是存在一些问题。

下面是一个我觉得这是比较安全的,因为它依赖于名称的工作日,并在EN区域。

let startDate = start.clone(),
    endDate = end.clone();

let days = 0;
do {
    const weekday = startDate.locale('en').format('dddd'); // Monday ... Sunday
    if (weekday !== 'Sunday' && weekday !== 'Saturday') days++;
} while (startDate.add(1, 'days').diff(endDate) <= 0);

return days;


0

在Date对象上使用.getDay()方法获取日期。

检查它是6(星期六)还是0(星期日)

var givenDate = new Date('2020-07-11');
var day = givenDate.getDay();
var isWeekend = (day === 6) || (day === 0) ? 'It's weekend': 'It's working day';
    
console.log(isWeekend);

欢迎来到SO。格式化答案时,请多加注意。普通文本不应放在代码块中。
Calculuswhiz

-1

以下输出一个布尔值:日期对象是否在“营业”小时内,不包括周末,并且不包括23H00和之间的夜间9H00,同时考虑到客户端时区偏移。

当然,这不处理特殊情况,例如假期,但不远;)

let t = new Date(Date.now()) // Example Date object
let zoneshift = t.getTimezoneOffset() / 60
let isopen = ([0,6].indexOf(t.getUTCDay()) === -1) && (23 + zoneshift  < t.getUTCHours() === t.getUTCHours() < 9 + zoneshift)

// Are we open?
console.log(isopen)
<b>We are open all days between 9am and 11pm.<br>
Closing the weekend.</b><br><hr>

Are we open now?

另外,要获取星期几作为语言环境“人类”字符串,我们可以使用:

let t = new Date(Date.now()) // Example Date object

console.log(
  new Intl.DateTimeFormat('en-US', { weekday: 'long'}).format(t) ,
  new Intl.DateTimeFormat('fr-FR', { weekday: 'long'}).format(t) ,
  new Intl.DateTimeFormat('ru-RU', { weekday: 'long'}).format(t)
)

注意new Intl.DateTimeFormat循环内的速度很慢,一个简单的关联数组的运行速度会更快:

console.log(
  ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][new Date(Date.now()).getDay()]
)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.