Potrzebuję najszybszego sposobu na pierwszy dzień tygodnia. Na przykład: dzisiaj jest 11 listopada i czwartek; i chcę pierwszy dzień tego tygodnia, czyli 8 listopada, i poniedziałek. Potrzebuję najszybszej metody dla funkcji mapy MongoDB, jakieś pomysły?
161
Odpowiedzi:
Korzystając z
getDay
metody obiektów Date, możesz poznać numer dnia tygodnia (0 = niedziela, 1 = poniedziałek itd.).Następnie możesz odjąć tę liczbę dni plus jeden, na przykład:
źródło
diff = d.getDate() - day;
d.setHours(0); d.setMinutes(0); d.setSeconds(0);
Nie jestem pewien, jak wypada na tle wydajności, ale to działa.
Lub jako funkcja:
źródło
date = new Date(date);
jako pierwszej linii w funkcji getMonday.Sprawdź Date.js
źródło
Date.parse('last monday');
Odpowiedź CMS jest prawidłowa, ale zakłada, że poniedziałek jest pierwszym dniem tygodnia.
Odpowiedź Chandlera Zwolle jest poprawna, ale bawi się prototypem Date.
Inne odpowiedzi, które grają z godzinami / minutami / sekundami / milisekundami, są błędne.
Poniższa funkcja jest poprawna i przyjmuje datę jako pierwszy parametr i żądany pierwszy dzień tygodnia jako drugi parametr (0 dla niedzieli, 1 dla poniedziałku itd.). Uwaga: godzina, minuty i sekundy są ustawione na 0, aby rozpocząć dzień.
źródło
To zadziała dobrze.
źródło
Używam tego
źródło
Ta funkcja wykorzystuje bieżący czas milisekund do odejmowania bieżącego tygodnia, a następnie odejmuje jeden tydzień więcej, jeśli bieżąca data wypada w poniedziałek (w języku JavaScript liczy się od niedzieli).
Przetestowałem to, gdy tydzień trwa od miesiąca do miesiąca (a także lat) i wydaje się, że działa prawidłowo.
źródło
Dobry wieczór,
Wolę mieć prostą metodę rozszerzenia:
Zauważysz, że faktycznie wykorzystuje inną metodę rozszerzenia, której używam:
Teraz, jeśli twoje tygodnie rozpoczynają się w niedzielę, podaj „0” dla parametru pStartOfWeek, na przykład:
var mThisSunday = new Date().startOfWeek(0);
Podobnie, jeśli tygodnie rozpoczynają się w poniedziałek, podaj wartość „1” dla parametru pStartOfWeek:
var mThisMonday = new Date().startOfWeek(1);
Pozdrowienia,
źródło
Pierwszy dzień tygodnia
Aby uzyskać datę pierwszego dnia tygodnia od dzisiaj, możesz użyć czegoś takiego:
Lub aby uzyskać ostatni dzień tygodnia od dzisiaj:
* W zależności od strefy czasowej początek tygodnia nie musi zaczynać się w niedzielę, może zaczynać się w piątek, sobotę, poniedziałek lub w inny dzień, na który urządzenie jest ustawione. Te metody to wyjaśnią.
* Możesz również sformatować go za pomocą następującej
toISOString
metody:getLastSunday().toISOString()
źródło
setDate () ma problemy z granicami miesiąca, które opisano w komentarzach powyżej. Prostym obejściem jest znalezienie różnicy dat przy użyciu datowników epok, a nie (zaskakująco sprzecznych z intuicją) metod w obiekcie Date. To znaczy
źródło
Oto moje rozwiązanie:
Teraz możesz wybrać datę na podstawie zwróconego indeksu tablicy.
źródło
Przykład obliczenia tylko matematycznego, bez żadnych
Date
funkcji.źródło
bardziej uogólniona wersja tego ... da ci to dowolny dzień w bieżącym tygodniu na podstawie tego, który dzień podasz.
źródło
Sprawdź: moment.js
Przykład:
Bonus: działa również z node.js
źródło
moment().startOf('week')
moment().startOf("week")
że w zależności od ustawień regionalnych może podać datę poprzedniej niedzieli. W takim przypadku użyjmoment().startOf('isoWeek')
zamiast tego: runkit.com/embed/wdpi4bjwh6rtstartOf()
: momentjs.com/docs/#/manipulating/start-of