Potrzebuję najszybszego sposobu na zdobycie pierwszego dnia tygodnia. Na przykład dzisiaj jest 11 listopada i czwartek, muszę przekonwertować tę datę na 8 listopada (poniedziałek). Potrzebuję najszybszej metody dla funkcji mapy MongoDB, jakichkolwiek pomysłów?JavaScript - pierwszy dzień tygodnia od bieżącej daty
Odpowiedz
Stosując metodę nieaktualne obiektów getDay
można poznać numer dnia tygodnia (jest 0 = niedziela, 1 = poniedziałek, etc).
można następnie odjąć tę liczbę dni plus jeden, na przykład:
function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
return new Date(d.setDate(diff));
}
getMonday(new Date()); // Mon Nov 08 2010
Dziękuję, ładny przykład – INs
Czy ta funkcja ma błąd? - jeżeli daną datą jest czwartek, 2 dzień, dzień = 4, diff = 2 - 4 + 1 = -1, a wynikiem setDate będzie "dzień przed ostatnim dniem poprzedniego miesiąca" (patrz [to] (http://www.w3schools.com/jsref/jsref_setdate.asp)). – Izhaki
@ Izhaki co masz na myśli? Dla 2 maja funkcja zwraca 29 kwietnia, co jest poprawne. – meze
Wyjazd Date.js
Date.today().previous().monday()
lub może "Date.parse (" ostatni poniedziałek ");' – Anurag
Potrzebuję go do bazy danych MongoDB. Nie mogę więc odwoływać się do date.js, ale dziękuję za fragment kodu. – INs
Ah, nie wiedziałem, że możesz wykonać JS bezpośrednio w MongoDB. To całkiem sprytne. Zakładałem, że używasz JS do przygotowania danych zapytania. – Matt
Nie wiem jak to porównać do wykonania, ale to działa.
var today = new Date();
var day = today.getDay() || 7; // Get current day number, converting Sun. to 7
if(day !== 1) // Only manipulate the date if it isn't Mon.
today.setHours(-24 * (day - 1)); // Set the hours to day number minus 1
// multiplied by negative 24
alert(today); // will be Monday
lub jako funkcja:
function getMonday(date) {
var day = date.getDay() || 7;
if(day !== 1)
date.setHours(-24 * (day - 1));
return date;
}
getMonday(new Date());
To powinna być odpowiedź, jako jedyna, która odpowiada na zadane pytanie. Pozostałe są błędne lub odsyłają do bibliotek stron trzecich. – OverMars
Cool to działa dla mnie! Dokonując pewnych korekt, fajnie dostaję zarówno poniedziałek, jak i piątek tygodnia od podanej daty! –
To jest świetne, z tą różnicą, że ta funkcja powinna być nazywana "setToMonday", ponieważ modyfikuje obiekt daty przekazany. GetMonday, zwróci nową datę, która jest poniedziałkiem na podstawie daty przekazanej. Subtelna różnica, ale która mnie złapała po używając tej funkcji. Najprostszą poprawką jest umieszczenie 'date = new Date (date);' jako pierwszej linii w funkcji getMonday. – Shane
Check out: moment.js
Przykład:
moment().day(-7); // last Sunday (0 - 7)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)
Bonus: współpracuje z node.js zbyt
To jednak nie jest odpowiedź na pytanie OP. Ma datę, powiedzmy 08/07/14 (d/m/r). On chce dostać pierwszy dzień tego tygodnia (dla mojego lokalu byłby to poniedziałek, który właśnie minął lub wczoraj) Odpowiedź na swoje pytanie z momentem brzmi: "moment(). StartOf (" tydzień ") –
Używam tego
function get_next_week_start() {
var now = new Date();
var next_week_start = new Date(now.getFullYear(), now.getMonth(), now.getDate()+(8 - now.getDay()));
return next_week_start;
}
Ta funkcja wykorzystuje aktualny czas milisekundy odjąć bieżącego tygodnia, a następnie odejmuje jeszcze jeden tydzień, jeśli bieżąca data jest na poniedziałek (javascript liczy się od niedzieli).
function getMonday(fromDate) {
// length of one day i milliseconds
var dayLength = 24 * 60 * 60 * 1000;
// Get the current date (without time)
var currentDate = new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate());
// Get the current date's millisecond for this week
var currentWeekDayMillisecond = ((currentDate.getDay()) * dayLength);
// subtract the current date with the current date's millisecond for this week
var monday = new Date(currentDate.getTime() - currentWeekDayMillisecond + dayLength);
if (monday > currentDate) {
// It is sunday, so we need to go back further
monday = new Date(monday.getTime() - (dayLength * 7));
}
return monday;
}
Testowałem to, gdy tydzień rozciąga się z jednego miesiąca na drugi (a także lata), i wydaje się, że działa prawidłowo.
setDate() ma problemy z granicami miesiąca, które są odnotowane w komentarzach powyżej. Oczywistym rozwiązaniem jest znalezienie różnicy dat za pomocą znaczników czasu epoki, a nie (zaskakująco sprzecznych z intuicją) metod na obiekcie Date. To znaczy.
function getPreviousMonday(fromDate) {
var dayMillisecs = 24 * 60 * 60 * 1000;
// Get Date object truncated to date.
var d = new Date(new Date(fromDate || Date()).toISOString().slice(0, 10));
// If today is Sunday (day 0) subtract an extra 7 days.
var dayDiff = d.getDay() === 0 ? 7 : 0;
// Get date diff in millisecs to avoid setDate() bugs with month boundaries.
var mondayMillisecs = d.getTime() - (d.getDay() + dayDiff) * dayMillisecs;
// Return date as YYYY-MM-DD string.
return new Date(mondayMillisecs).toISOString().slice(0, 10);
}
Dobry wieczór,
Wolę po prostu prostą metodę rozszerzenia:
Date.prototype.startOfWeek = function (pStartOfWeek) {
var mDifference = this.getDay() - pStartOfWeek;
if (mDifference < 0) {
mDifference += 7;
}
return new Date(this.addDays(mDifference * -1));
}
Zauważysz to rzeczywiście wykorzystuje inną metodę rozszerzenia, które używam:
Date.prototype.addDays = function (pDays) {
var mDate = new Date(this.valueOf());
mDate.setDate(mDate.getDate() + pDays);
return mDate;
};
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 tydzień rozpocznie się w poniedziałek, przechodzą na "1" dla parametru pStartOfWeek:
var mThisMonday = new Date().startOfWeek(1);
Pozdrowienia,
Oto moje rozwiązanie:
function getWeekDates(){
var day_milliseconds = 24*60*60*1000;
var dates = [];
var current_date = new Date();
var monday = new Date(current_date.getTime()-(current_date.getDay()-1)*day_milliseconds);
var sunday = new Date(monday.getTime()+6*day_milliseconds);
dates.push(monday);
for(var i = 1; i < 6; i++){
dates.push(new Date(monday.getTime()+i*day_milliseconds));
}
dates.push(sunday);
return dates;
}
Teraz możesz wybrać datę przez zwrócony indeks tablicy.
var dt = new Date(); // current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var wkStart = new Date(new Date(dt).setDate(dt.getDate() - lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));
To zadziała dobrze.
- 1. Android: Uzyskaj dzień tygodnia od daty?
- 2. Pierwszy dzień tygodnia Moment.js niepoprawny
- 3. Swift - dzień tygodnia od bieżącej lokalizacji przez currentCalendar()
- 4. dodaj dzień do bieżącej daty
- 5. Pierwszy dzień miesiąca od daty daty POSIXct za pomocą lubridate
- 6. Jak znaleźć dzień tygodnia od daty przy użyciu PHP?
- 7. Jak ustawić "pierwszy dzień tygodnia" na czwartek w PHP
- 8. Znajdź dzień tygodnia
- 9. Jak znaleźć pierwszy dzień tygodnia, do którego należy dana data?
- 10. Angular 4 - materiał 2 - md datepicker ustawić pierwszy dzień tygodnia
- 11. Uzyskaj numer tygodnia od podanej daty
- 12. Znajdź zakres dat tygodnia według bieżącej daty w sql?
- 13. Jak znaleźć co dzień tygodnia dla danej daty użyciem kakao
- 14. Ustawienie dnia tygodnia w javascript
- 15. Pierwszy dzień bieżącego roku
- 16. Uzyskiwanie pierwszej daty z pierwszego miesiąca od bieżącej daty w JavaScript
- 17. Jak określić dzień pierwszego tygodnia na iOS?
- 18. PHP dni tygodnia numeryczne, aby dzień tygodnia tekst
- 19. Datownik JQuery zwraca numer tygodnia i dzień tygodnia
- 20. Format daty w dzień, dzień miesiąca, rok
- 21. Format daty Dzień roku
- 22. Get pierwszy i ostatni dzień poprzedniego miesiąca
- 23. R znaleźć ostatni dzień tygodnia miesiąca
- 24. Jak uzyskać wartość całkowitą dzień tygodnia
- 25. Moment JS - jak odjąć 7 dni od bieżącej daty?
- 26. Jak uzyskać ostatni dzień miesiąca od określonej daty?
- 27. Jak znaleźć, który dzień tygodnia to jest - Java
- 28. Tydzień tygodnia w formacie daty
- 29. Jak mogę zmienić, który dzień jest pierwszym dniem tygodnia?
- 30. Ustaw dzień rozpoczęcia tygodnia w jQuery UI Datepicker?
Jeśli każda najmniejsza szybkość ma kluczowe znaczenie, może warto przetestować moją odpowiedź. Dostaję trochę lepszą wydajność z moimi w przeglądarkach (z wyjątkiem IE, co sprzyja CMS). Oczywiście, musisz przetestować go z MongoDB. Gdy funkcja zostanie przyjęta jako poniedziałek, powinna być jeszcze szybsza, ponieważ po prostu zwraca niezmienioną oryginalną datę. – user113716
Mam ten sam problem i ponieważ obiekt daty javascript ma wiele błędów, których używam teraz http://www.datejs.com (tutaj http://code.google.com/p/datejs/), biblioteka które korygują brakujące zachowanie macierzystej daty. – lolol