如果我有一个要加入功能的日期,该如何确定是周末?
Answers:
var day = yourDateObject.getDay();
var isWeekend = (day === 6) || (day === 0); // 6 = Saturday, 0 = Sunday
d
!= day
:)我宁愿称呼它dayOfWeek
,对OP来说更有意义。
getDay
根据当前时区设置,周日应始终返回0,周六应始终返回6。(然后由OP根据他们的要求决定什么构成“周末”。)
===
而不是==
比较绝对值。不是关键,而只是最佳实践。
var isWeekend = yourDateObject.getDay()%6==0;
.getDay()
将导致另一个值,或者是否将定义isWeekend
错误。如果关于变量,我不在乎。我想0永远是星期日,所以对我来说很好。
我尝试了正确答案,它在某些语言环境中有效,但不适用于所有语言环境:
在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方法,但未指定。
我已经在这里测试了大多数答案,并且时区,语言环境或每周的开始时间是星期日还是星期一总是存在一些问题。
下面是一个我觉得这是比较安全的,因为它依赖于名称的工作日,并在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);
以下输出一个布尔值:日期对象是否在“营业”小时内,不包括周末,并且不包括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;