2010-09-03 22 views
19

Myślę, że głównie mam bart mózg. Chcę tylko szybko przewinąć do przodu Date() do określonego dnia tygodnia, a następnie otrzymać Miesiąc, Dzień, Rok.Pobierz datę konkretnego dnia tygodnia w JavaScript

E.g. dzisiaj jest 09/03/10, ale chcę funkcji (nextSession()), aby powrócić 09/08/10 (następna środa).

Jak to zrobić? Najlepsze, co mogę zrobić, to dodać dzień do setDate() do getDay() == 3, ale to jest trochę brzydkie ...

P.S. jQuery też jest fajny.

Odpowiedz

29
function nextSession(date) { 
    var ret = new Date(date||new Date()); 
    ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1); 
    return ret; 
} 

Ten ustawi datę na najbliższą środę. Jeśli jest już środa, wynik będzie tydzień później od podanej daty.

EDIT: Dodano możliwość wywołanie funkcji bez parametru: nextSession() - zwraca kolejną datę sesji od dziś

+0

Zmodyfikowano do: function xnextSession() { \t var ret = new Date(); \t ret.setDate (ret.getDate() + (3 - 1 - ret.getDay() + 7)% 7 + 1); \t return ret; \t} To nadal będzie działać poprawnie? Mam na myśli ... wydaje się, że ... –

+0

Widzę, że zmieniłeś 'var ret = new Date();' Musi to być 'new Date (date)', ponieważ setDate() ustawi tylko dzień miesiąca i inne informacje, takie jak miesiąc lub rok, minęły. Powodem, dla którego deklaruję zmienną wartość, jest to, że nie chcę zmieniać wartości "date". 'var ret = new Data (data)' tworzy kopię obiektu 'date', a nie kopię odniesienia. EDIT: Przepraszam, oczywiście, że będzie działać na bieżący dzień, nie widziałem wszystkiego^^ ' – pepkin88

+0

Cholera, to jest czyste. Moja jedyna sugestia to uczynienie dnia, w którym przechodzisz do parametru. +1 – Ender

8

Użyj the DateJS library.

Date.parse('next wednesday'); 
+19

nic nam nie zostało do kodu dla programistów czy co? +1 – Anurag

+0

@Anurag poważnie! –

+0

@Adam dzięki, wygląda idealnie, ale zamierzam poczekać, aby zobaczyć, czy ktoś daje mi lżejszy sposób robienia tego. 25k + jQuery + jQuery UI + mój osobisty plik JS 40kb dla tej aplikacji jest dość ciężki haha ​​Ale jest to bardzo fajna biblioteka –

5

Jeśli wystarczy środę, powinieneś być w stanie zrobić coś takiego:

function next(today) { 
    var offset = (today.getDay() < 3) ? 0 : 7; 
    var daysUntilWednesday = 3 + offset - today.getDay(); 
    return new Date().setDate(today.getDate() + daysUntilWednesday); 
} 

var wed = next(new Date()); 

EDIT:

lub coś takiego? http://jsfiddle.net/zy7F8/1/

var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; 

function next(day) { 

    var today = new Date(); 
    var today_day = today.getDay(); 

    day = day.toLowerCase(); 

    for (var i = 7; i--;) { 
     if (day === days[i]) { 
      day = (i <= today_day) ? (i + 7) : i; 
      break; 
     } 
    } 

    var daysUntilNext = day - today_day; 

    return new Date().setDate(today.getDate() + daysUntilNext); 

} 

// insert a week day 
alert(new Date(next("Wednesday")));​​​​​​​​​ 

EDIT: dokonała korekty wprowadzonych przez kilka dni, które są jeszcze przed nami w tym samym tygodniu.

+1

Czy ktoś może podać * inteligentny * powód do głosowania w dół? – user113716

2

Proszę bardzo: http://jsfiddle.net/ePQuv/

JS (nie jQuery potrzebne) jest:

function addDays(myDate,days) { 
    return new Date(myDate.getTime() + days*24*60*60*1000); 
} 

function subtractDays(myDate,days) { 
    return new Date(myDate.getTime() - days*24*60*60*1000); 
} 

function dateOfNext(weekdayNumber) { 
    var today = new Date(); 

    var lastSunday = subtractDays(today, today.getDay()); 

    var daysToAdd = weekdayNumber; 
    if (weekdayNumber <= today.getDay()) { 
     daysToAdd = daysToAdd + 7; 
    } 

    return addDays(lastSunday, daysToAdd); 
} 

To, co robi, to odejmij bieżący dzień tygodnia od bieżącej daty, aby uzyskać ostatnią niedzielę. Następnie, jeśli dzisiaj jest po lub równe "następnego dnia", którego szukasz, dodaje 7 dni + dzień tygodnia, do którego chcesz dotrzeć, w przeciwnym razie po prostu dodaje dzień tygodnia. Spowoduje to wylądowanie następnego dnia tygodnia.

2

Oto funkcja zwracania numeru następnego dnia.

function nextDay(dayNb){ 
return function(date){ 
    return new Date(date.getTime() + ((dayNb-date.getDay() +7) %7 +1) *86400000); 
}; 
} 

Aby go użyć, należy ustawić liczbę dni chcesz 0: Pon - 6: Sun

var nextWed = nextDay(2); 
    alert(nextWed(new Date())); 
1

polecam użyć moment.js czy pracy z datami.

var nextmonday = moment().day(8).format('YYYY-MM-DD'); // e.g. 2015-10-26 
var nexttuesday = moment().day(9).format('YYYY-MM-DD'); // e.g. 2015-10-27 
var nextwednesday = moment().day(10).format('YYYY-MM-DD'); // e.g. 2015-10-28 
var nextthursday = moment().day(11).format('YYYY-MM-DD'); // e.g. 2015-10-29 

Można wybierać różne formaty i zrobić jeszcze ładne rzeczy, sprawdź: http://momentjs.com/

0

proste obliczenie:

//for next sunday, set 0, for saturday 6; wednesday == 3; 
 
var needDay = 3; 
 
var fromDate = new Date(); //or any date you calculate from 
 
fromDate.setDate(fromDate.getDate() + (7 - fromDate.getDay()) + needDay); 
 

 
console.log(fromDate);

+ (7 - fromdate. getDay()): dodaje do daty liczbę dni, aby zmienić datę na sundę y.
+ needDay: dodaje twój dzień, którego potrzebujesz, jeśli środa, tylko +3;

Powiązane problemy