Jak uzyskać bieżący numer tygodnia w roku, taki jak PHP date('W')
?
Powinien to być numer tygodnia w roku ISO-8601 , tygodnie rozpoczynające się w poniedziałek.
javascript
date
PeeHaa
źródło
źródło
Odpowiedzi:
Powinieneś być w stanie uzyskać to, czego chcesz, tutaj:
http://www.merlyn.demon.co.uk/js-date6.htm#YWD.Lepszy link w tej samej witrynie to:
Praca z tygodniami.Edytować
Oto kod oparty na podanych linkach i opublikowany przez Dommera. Został lekko przetestowany z wynikami pod
adresem http://www.merlyn.demon.co.uk/js-date6.htm#YWD. Prosimy o dokładne przetestowanie, bez gwarancji.Edytuj 2017
Wystąpił problem z datami w okresie, w którym obserwowano czas letni i latami, w których 1 stycznia przypadał w piątek. Naprawiono przy użyciu wszystkich metod UTC. Poniższe zwraca identyczne wyniki jak Moment.js.
Podczas tworzenia daty „UTC” godziny są zerowane.
Zminimalizowana wersja prototypowa (zwraca tylko numer tygodnia):
Sekcja testowa
W tej sekcji możesz wprowadzić dowolną datę w formacie RRRR-MM-DD i sprawdzić, czy ten kod podaje ten sam numer tygodnia, co numer tygodnia w Moment.js ISO (testowany przez 50 lat od 2000 do 2050).
źródło
d.setMilliseconds(0)
- pokazywał różne numery tygodni dla tej samej daty, w zależności od tego, czy użyłem nowej daty (), czy nowej daty („1/4/2016”). Tylko jedno ostrzeżenie dla innych, którzy mogą doświadczyć tego samego.Możesz również skorzystać z biblioteki momentjs:
moment().format('W')
źródło
moment().week()
Jak wspomniano powyżej, ale bez klasy:
źródło
(now.getTime() - onejan.getTime())
aby uniknąć problemów z kompilacją.Zgodnie z http://javascript.about.com/library/blweekyear.htm
źródło
Date.format()
Biblioteka Jacoba Wrighta implementuje formatowanie daty w stylu funkcji PHPdate()
i obsługuje numer tygodnia ISO-8601:Może to być trochę przesada jak na numer tygodnia, ale obsługuje formatowanie w stylu PHP i jest całkiem przydatne, jeśli będziesz to robić dużo.
źródło
Poniższy kod jest niezależny od strefy czasowej (używane daty UTC) i działa zgodnie z https://en.wikipedia.org/wiki/ISO_8601
źródło
Przydatna okazała się klasa SimpleDateFormat Java SE opisana w specyfikacji Oracle: http://goo.gl/7MbCh5 . W moim przypadku w Google Apps Script działało to tak:
Na przykład w makrze arkusza kalkulacyjnego możesz pobrać aktualną strefę czasową pliku:
źródło
To dodaje metodę „getWeek” do Date.prototype, która zwraca numer tygodnia od początku roku. Argument określa, który dzień tygodnia należy wziąć pod uwagę jako pierwszy. Jeśli nie podano argumentu, przyjmuje się, że pierwszy dzień to niedziela.
źródło
new Date(Date.UTC(2018,11, 31)).getWeek(1)+1
(poniedziałek jest pierwszym dniem tygodnia w Niemczech).Uzyskaj numer tygodnia z dowolnej daty
Przykład
źródło
I need the week to begin on a Sunday
; Myślę, że jedyną potrzebną zmianą jest zmiana funkcji dnia tygodnia ().getDay()+1
na.getDay()
Poniższy kod oblicza prawidłowy numer tygodnia ISO 8601.
date("W")
Odpowiada PHP dla każdego tygodnia między 01.01.1970 a 01.01.2021.Źródło: Taco van den Broek
Jeśli nie interesujesz się rozszerzaniem prototypów, oto funkcja:
Przykładowe użycie:
źródło
+6 ) % 7
robi ta część. Dzięki od zarośla!getDay()
zaczyna się w niedzielę, więc jeśli chcesz, aby zaczął się w niedzielę, możesz usunąć korektę:var nDay = date.getDay();
Jeśli jesteś już w projekcie Angular, możesz użyć
$filter('date')
.Na przykład:
źródło
Fragment kodu, który działa całkiem nieźle, to ten:
Uwaga:
d
to moja data, dla której chcę podać numer bieżącego tygodnia.W
+
konwertuje daty na postać cyfrową (praca z maszynopis).źródło
Oto moja implementacja do obliczania numeru tygodnia w JavaScript. skorygowane również o przesunięcia czasu letniego i zimowego. Użyłem definicji tygodnia z tego artykułu: ISO 8601
Tygodnie są od poniedziałku do niedzieli, a 4 stycznia jest zawsze pierwszym tygodniem roku.
do testów użyłem następujących testów JavaScript w Qunit
źródło
Ten numer tygodnia był prawdziwym wrzodem na punkcie a **. Większość skryptów w sieci nie działała dla mnie. Pracowały przez większość czasu, ale wszystkie w pewnym momencie się zepsuły, zwłaszcza gdy zmienił się rok, a ostatni tydzień roku był nagle pierwszym tygodniem przyszłego roku itd. Nawet filtr dat w Angular pokazał nieprawidłowe dane (był to pierwszy tydzień przyszłego roku, angular dał 53 tydzień).
Uwaga: przykłady są przeznaczone do pracy z tygodniami europejskimi (najpierw poniedziałek)!
getWeek ()
setDay ()
getDayIndex ()
Przetestowałem to i wygląda na to, że działa bardzo dobrze, ale jeśli zauważysz w nim usterkę, daj mi znać.
źródło
Bardzo się starałem, aby uzyskać jak najkrótszy kod, aby numer tygodnia był zgodny z ISO.
Zmienna
date
jest konieczna, aby uniknąć zmiany oryginałuthis
. Użyłem zwracanych wartościsetDate()
i,setMonth()
aby zrezygnować zgetTime()
zapisywania długości kodu, a zamiast mnożenia pojedynczych elementów lub liczby z pięcioma zerami użyłem liczby wykładniczej dla milisekund dnia.this
to Data lub Liczba milisekund, zwracana wartość toString
np. „49/2017”.źródło
Z Luxon ( https://github.com/moment/luxon ):
źródło
Inna opcja oparta na bibliotece: użyj
d3-time-format
:źródło
Najkrótsze obejście dla Angular2 + DatePipe, dostosowane do ISO-8601:
źródło
źródło