cách xác định xem ngày có phải là cuối tuần hay không trong javascript [đã đóng]


81

Nếu tôi có một ngày đi vào một chức năng, làm thế nào tôi có thể biết ngày đó có phải là ngày cuối tuần hay không?


Lưu ý rằng một số quốc gia có thứ Sáu và thứ Bảy như cuối tuần (như tôi đã đề cập trong các câu trả lời) vì vậy một câu trả lời nên xem xét cuối tuần bằng nước en.wikipedia.org/wiki/Workweek_and_weekend
Guy

Câu trả lời:


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

9
d! = day:) thà gọi như dayOfWeekvậy thì OP sẽ hợp lý hơn.
BalusC

4
Điều này không đúng với tất cả các múi giờ. Ví dụ, ở Pháp, ngày đầu tuần sẽ là thứ Hai, không phải Chủ nhật. Các thư viện thời hiện đại như Moment bù đắp cho điều này.
csvan

7
@csvan: getDayphải luôn trả về 0 cho chủ nhật và 6 cho thứ bảy, v.v., theo cài đặt múi giờ hiện tại. (Và sau đó OP sẽ quyết định điều gì tạo thành "cuối tuần" theo yêu cầu của họ.)
LukeH

1
Đối với js, có lẽ tốt hơn nếu bạn làm ===thay vì ==so sánh các giá trị tuyệt đối. Không quan trọng, nhưng chỉ là thực hành tốt nhất.
dylanh724


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

Điều này cho biết sẽ trả về true nếu đó là thứ Bảy
Gianfranco P.

13
0% 6 (Chủ nhật) và 6% 6 (Thứ bảy) đều có mô-đun 0
kennebec

8
ngoại trừ việc tự nguyện gây nhầm lẫn, tôi không thấy điểm nào trong kỹ thuật này. Cá nhân tôi thích câu trả lời của LukeH hơn. Chỉ tình cờ là trong trường hợp này chúng ta có thể sử dụng modulo là 6 thay vì 7 để giải quyết vấn đề của mình.
Henri Lapierre

Một số quốc gia có thứ sáu và thứ bảy là cuối tuần
Guy

@Guy thì câu hỏi là nếu .getDay()sẽ dẫn đến một giá trị khác hoặc nếu định nghĩa của isWeekendsẽ sai. Nếu nó là về biến, tôi không quan tâm. Tôi đoán số 0 sẽ luôn là chủ nhật, vì vậy nó tốt cho tôi.
C4d


5

Tôi đã thử câu trả lời Đúng và nó hoạt động với một số ngôn ngữ nhất định nhưng không phải cho tất cả:

Trong tài liệu momentjs: ngày trong tuần Số được trả về phụ thuộc vào miền địa phương ban đầuWeekDay, vì vậy thứ Hai = 0 | Chủ nhật = 6

Vì vậy, tôi thay đổi logic để kiểm tra DayString thực tế ('Chủ nhật')

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

Bằng cách này, bạn độc lập với ngôn ngữ địa phương.


Một số quốc gia có thứ sáu và thứ bảy là cuối tuần
Guy

@Guy Bạn cần điều chỉnh mã để đáp ứng nhu cầu của quốc gia. Theo wiki bạn liên kết ở trên, một số quốc gia khác có một ngày cuối tuần. 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

1

Cập nhật năm 2020

Hiện nay có nhiều cách để đạt được điều này.

1) Sử dụng dayphương pháp để lấy các ngày từ 0-6:

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

2) Sử dụng isoWeekdayphương pháp lấy các ngày từ 1-7:

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

.isoWeekday()là một phương thức moment.js, nhưng không được chỉ định.
NVRM

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

0

Tôi đã kiểm tra hầu hết các câu trả lời ở đây và luôn có một số vấn đề với Múi giờ, Ngôn ngữ hoặc thời điểm bắt đầu của tuần là Chủ nhật hoặc Thứ hai.

Dưới đây là một mà tôi tìm thấy là an toàn hơn, vì nó dựa trên tên của các ngày trong tuần và trên en locale.

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

Trong phiên bản hiện tại, bạn nên sử dụng

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

0

Sử dụng phương thức .getDay () trên đối tượng Date để lấy ngày.

Kiểm tra xem đó là 6 (thứ bảy) hay 0 (chủ nhật)

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);

Chào mừng đến với SO. Hãy cẩn thận hơn khi định dạng câu trả lời của bạn. Văn bản bình thường không nên đi trong các khối mã.
Calculuswhiz

-1

Sau đây xuất ra một boolean cho dù một đối tượng ngày tháng có trong giờ « mở cửa », không bao gồm ngày cuối tuần và không bao gồm giờ hàng đêm giữa 23H009H00, trong khi có tính đến chênh lệch múi giờ của khách hàng.

Tất nhiên điều này không xử lý các trường hợp đặc biệt như ngày lễ, nhưng không xa;)

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?

Ngoài ra, để lấy ngày trong tuần dưới dạng chuỗi địa phương Người , chúng ta có thể sử dụng:

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)
)

Lưu ý new Intl.DateTimeFormatlà vòng lặp bên trong chậm, một mảng kết hợp đơn giản chạy nhanh hơn:

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


-3

Chỉ cần thêm 1 trước modulo

var isWeekend = (yourDateObject.getDay() + 1) % 7 == 0;

5
Điều này chỉ hoạt động nếu bạn coi Chủ nhật là cả ngày cuối tuần.
Tất cả các công nhân đang Essential

@cpburnz hầu hết các quốc gia đều có. chỉ một số ít bắt đầu tuần với chủ nhật.
bokkie

2
@bokkie Sau đó, đó là một phần thông tin quan trọng cần được thêm vào câu trả lời của bạn.
Tất cả người lao động đều cần thiết
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.