2015-10-12 22 views
9

Làm cách nào để có được Thứ Hai tiếp theo trong JavaScript? Tôi không thể tìm thấy bất cứ điều gì trong số này trên internet và tôi cũng đã thử rất nhiều mã và hiểu biết về điều này nhưng tôi không thể thực sự làm điều đó.Lấy ngày Thứ Hai tới

Dưới đây là mã của tôi:

var d = new Date(); 
var day = d.getDay(); 
d = new Date(d.setDate(d.getDate() + day + (day == 0 ? -6 : 2))); 
+1

Nếu hôm nay là Thứ Hai, sau đó bạn muốn thứ hai tiếp theo hoặc ngày hôm nay? –

+0

@BerozaPaul Hôm nay – nubteens

+0

Kiểm tra: http://stackoverflow.com/questions/9481158/how-to-get-the-4-monday-of-a-month-with-js – belford

Trả lời

23

này sẽ làm:

var d = new Date(); 
d.setDate(d.getDate() + (1 + 7 - d.getDay()) % 7); 
console.log(d); 
+2

không hoạt động cho tất cả các trường hợp, ví dụ: "09/26/2017" nó cho 32 :) bạn nên kiểm tra tháng và số ngày calcule trong mỗi tháng –

+1

@MouradIdrissi Nó mang lại kết quả chính xác cho tôi. 'var d = new Date (" 2017-09-26 ")', theo sau là mã ở trên mang lại thứ hai ngày 2 tháng 10 năm 2017, là thứ hai tiếp theo sau thứ ba 26 tháng 9 năm 2017. –

0

hãy thử này,

d = new Date(d); 
var day = d.getDay(), 
diff = d.getDate() - day + (day == 0 ? -6:1); 
alert(new Date(d.setDate(diff))); 

Cảm ơn Amit

+0

Điều này cho tôi giá trị sai – nubteens

2

Sử dụng moment.js,

moment().add(7, 'days').calendar(); 
+2

câu hỏi không được> Tôi có thể sử dụng thư viện/khung nào? < – Anonymous0day

+3

Nó có được đề cập ở bất kỳ đâu trong câu hỏi gốc không? Người đó đang tìm kiếm một giải pháp và tôi đã cho tôi sử dụng một thư viện phổ biến. – riyadhalnur

9

này sẽ gi đã vào thứ hai tới nếu hôm nay là Thứ Hai

var d = new Date(); 
d.setDate(d.getDate() + (7-d.getDay())%7+1); 

này sẽ cho kết quả trong ngày hôm nay nếu hôm nay là Thứ Hai

var d = new Date(); 
d.setDate(d.getDate() + ((7-d.getDay())%7+1) % 7); 
+0

điều này hoạt động tốt trong giao diện điều khiển của tôi, nhưng không phải trong mã nodejs của tôi – bubunyo

+0

hoạt động giống hệt với tôi - nếu bạn cung cấp thêm thông tin nhiều hơn * nó không hoạt động * mà chỉ là đào - xem mã này cho kết quả tương tự mã bạn chấp nhận, tôi nghĩ rằng bạn có thể làm sai nó –

+0

Tôi đã bỏ mã này trong JS fiddle. Nó hoạt động tốt. Khi tôi bỏ nó vào ứng dụng thiên thạch ngày hôm qua, tôi đã nhận được ngày 14 – bubunyo

0

Nếu bạn cần để xử lý các múi giờ, người ta tùy chọn sẽ là sử dụng các phương pháp UTCDate setUTCDate()getUTCDate(). Điều này cho phép tính nhất quán để tính toán là như nhau bất kể cài đặt múi giờ.

var d = new Date(); 
d.setUTCDate(d.getUTCDate() + (7 - d.getUTCDay()) % 7 + 1); 

(Đây là ví dụ từ trên, nơi vào Thứ Hai ngày Thứ Hai sau được trả lại)

0
var closestMonday =() => { 
    var curr_date = new Date(); // current date 
    var day_info = 8.64e+7; // milliseconds per day 
    var days_to_monday = 8 - curr_date.getDay(); // days left to closest Monday 
    var monday_in_sec = curr_date.getTime() + days_to_monday * day_info; // aleary Monday in seconds from 1970 
    var next_monday = new Date(monday_in_sec); // Monday in date object 
    next_monday.setHours(0,0,0); 
    return next_monday; 
} 
Các vấn đề liên quan