Tworzę kalendarz, w którym drukuję tygodnie w formacie tabelarycznym. Jednym z wymagań jest to, żebym mógł rozpocząć tydzień w poniedziałek lub niedzielę, zgodnie z opcją użytkownika. Trudno mi jest używać metody isoWeekday firmy Moment .
// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// We begin on the start of the first week.
// Mon Tues Wed Thur Fri Sat Sun
// 20 21 22 23 24 25 26
begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting
console.log(begin.isoWeekday()); // 1 - all good
// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');
console.log(begin.isoWeekday()); // 7 - what happened ???
// Get column headers
for (var i=0; i<7; i++) {
console.log(begin.format('ddd')); // I want Monday first!
begin.add('d', 1);
}
EDYTUJ Źle zrozumiałem, co isoWeekday
właściwie robię. Myślałem, że ustawia zmienną „który dzień tygodnia jest pierwszym dniem tygodnia” (która nie istnieje). W rzeczywistości po prostu zmienia dzień tygodnia, tak jak moment.weekday()
, ale używa zakresu 1-7 zamiast 0-6.
javascript
momentjs
oszczędzający
źródło
źródło
startOf('week')
zależy od aktualnego regionu, w którym niedziela oznacza oczywiście początek tygodnia w twoim przypadku.startOf('iweek')
otrzyma ISO początek tygodnia, czyli poniedziałek. Ale masz rację, nie znalazłem żadnej dokumentacji na oficjalnej stronie ...isoweek
.isoWeek
, przez duże W, w najnowszej wersjiZadzwoń
startOf
wcześniejisoWeekday
.Działające demo
źródło
W ten sposób możesz ustawić pierwszy dzień tygodnia.
Upewnij się, że używasz go z
moment().weekday(1);
zamiast moment.isoWeekday (1)źródło
pomyślałem, że dodam to dla przyszłych peeps. Zawsze upewni się, że jego poniedziałek, jeśli zajdzie taka potrzeba, może być również wykorzystany, aby zawsze zapewnić niedzielę. Dla mnie zawsze potrzebuję poniedziałku, ale lokalny jest zależny od używanej maszyny, a to jest łatwa naprawa:
źródło
Oto bardziej ogólne rozwiązanie na dowolny dzień tygodnia. Działające demo na jsfiddle
źródło
Dla tych, którzy chcą
isoWeek
być domyślni, możesz zmodyfikować zachowanie momentu w następujący sposób:Teraz możesz po prostu używać
someDate.startOf('week')
bez obawy, że dostaniesz niedzielę lub będziesz musiał myśleć o tym, czy użyć,isoweek
czyisoWeek
itp.Plus można zapisać to w zmiennej jak
const period = 'week'
i używać go bezpiecznie wsubtract()
lubadd()
operacje, npmoment().subtract(1, period).startOf(period);
. To nie zadziała z okresemisoWeek
.źródło