2015-10-12 13 views
9

Jak mogę uzyskać następny poniedziałek w JavaScript? Nie mogę znaleźć niczego w Internecie i próbowałem również wielu kodów i zrozumienia tego, ale naprawdę nie mogę tego zrobić.Otrzymywanie daty następnego poniedziałku

Oto mój kod:

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

Jeżeli dzisiaj jest poniedziałek, a chcesz następny poniedziałek lub dzisiejsza data? –

+0

@BerozaPaul Dzisiaj – nubteens

+0

Sprawdź również: http://stackoverflow.com/questions/9481158/how-to-get-the-4-monday-of-a-month-with-js – belford

Odpowiedz

23

Będzie to zrobić:

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

, która nie działa dla wszystkich przypadków, na przykład: "29.09.2017" daje 32 :) należy przetestować miesiąc i obliczać liczbę dni w co miesiąc –

+1

@MouradIdrissi Daje prawidłowy wynik dla mnie. 'var d = new Date (" 2017-09-26 ")', a następnie powyższy kod oznacza poniedziałek 2 października 2017 r., czyli w następny poniedziałek po wtorku 26 września 2017 r. –

0

spróbuj tego

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

Dzięki Amit

+0

To daje mi złe wartości – nubteens

2

Korzystanie moment.js,

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

The pytanie nie było> Z której biblioteki/platformy mogę korzystać? < – Anonymous0day

+3

Czy jest to wzmiankowane w dowolnym miejscu pierwotnego pytania? Osoba szukała rozwiązania, a ja oddałem ją za pomocą popularnej biblioteki. – riyadhalnur

9

Będzie to gi ve następnego poniedziałku, jeśli dzisiaj jest poniedziałek

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

Spowoduje to dzisiaj, jeśli dzisiaj jest poniedziałek

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

to działa dobrze w mojej konsoli, ale nie w moim kodzie nodejs – bubunyo

+0

działa identycznie dla mnie - jeśli dasz trochę więcej informacji niż * to nie działa * to byłoby po prostu brzoskwiniowe - biorąc pod uwagę ten kod daje takie same wyniki jak kod, który zaakceptowałeś, myślę, że prawdopodobnie robisz to źle –

+0

Upuściłem ten kod w skrzypcach JS. Wszystko działało dobrze. Kiedy wczoraj wrzuciłem go do mojej aplikacji meteorologicznej, otrzymywałem datę 14 – bubunyo

0

Jeśli trzeba obsłużyć stref czasowych, jeden opcją byłoby użycie metod UTCDate setUTCDate() i getUTCDate(). Pozwala to na zachowanie spójności, więc obliczenia są takie same bez względu na ustawienie strefy czasowej.

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

(Jest to przykład z góry, gdzie w poniedziałek zostanie zwrócony w następny poniedziałek)

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; 
} 
Powiązane problemy