【发布时间】:2010-08-23 21:20:57
【问题描述】:
如果我有一个日期进入函数,我如何判断它是否是周末?
【问题讨论】:
-
请注意,某些国家/地区将星期五和星期六作为周末(正如我在答案中提到的那样),因此答案应按国家/地区考虑周末en.wikipedia.org/wiki/Workweek_and_weekend
标签: javascript date
如果我有一个日期进入函数,我如何判断它是否是周末?
【问题讨论】:
标签: javascript date
var dayOfWeek = yourDateObject.getDay();
var isWeekend = (dayOfWeek === 6) || (dayOfWeek === 0); // 6 = Saturday, 0 = Sunday
【讨论】:
d != day :) 我宁愿称它为dayOfWeek,对 OP 来说更有意义。
getDay 应该始终返回 0 表示周日,6 表示周六等,根据当前的时区设置。 (然后由 OP 根据他们的要求决定什么构成“周末”。)
=== 而不是== 可能会更好。不是关键,只是最佳实践。
var isWeekend = yourDateObject.getDay()%6==0;
【讨论】:
.getDay() 是否会产生另一个值,或者isWeekend 的定义是否错误。如果它关于变量,我不在乎。我想 0 永远是星期天,所以对我来说没问题。
又短又甜。
var isWeekend = ([0,6].indexOf(new Date().getDay()) != -1);
【讨论】:
我尝试了正确答案,它适用于某些语言环境,但不适用于所有语言环境:
在 momentjs 文档中:weekday 返回的数字取决于区域设置 initialWeekDay,因此 Monday = 0 |星期日 = 6
所以我改变逻辑来检查实际的 DayString('Sunday')
const weekday = momentObject.format('dddd'); // Monday ... Sunday
const isWeekend = weekday === 'Sunday' || weekday === 'Saturday';
这样你就可以独立于语言环境了。
【讨论】:
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).
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 方法,但未指定。
var d = new Date();
var n = d.getDay();
if( n == 6 )
console.log("Its weekend!!");
else
console.log("Its not weekend");
【讨论】:
我已经在这里测试了大多数答案,但时区、语言环境或一周的开始时间是星期日还是星期一总是存在一些问题。
下面是我认为更安全的一个,因为它依赖于工作日的名称和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;
【讨论】:
在当前版本中,你应该使用
var day = yourDateObject.day();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
【讨论】:
在 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);
【讨论】:
以下输出一个布尔值,日期对象是否在 «opening» 小时内,不包括周末,不包括 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()]
)
【讨论】:
在模前加1
var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;
【讨论】: