Możemy dowiedzieć się, jak przenieść numer tygodnia od tego, co jest zwracane przez %U
(słońce zaczyna tydzień), uznając ten kalendarz fragment:
August 2015 Su Mo Tu We Th Fr Sa 1 %U => 30 2 3 4 5 6 7 8 %U => 31 9 10 11 12 13 14 15 %U => 32
sposób Załóżmy, że chcesz Wed- Wtorek, w skrócie format %?
(nie musimy więc pisać "Śro zaczyna tydzień").
Chcemy:
August 2015 We Th Fr Sa Su Mo Tu 1 2 3 4 %? => 30 5 6 7 8 9 10 11 %? => 31 12 13 14 15 %? => 32
Wskazówki, jak My-Sa pobyt w tym samym numerem tygodnia w obu systemach, podczas gdy wszystkie pozostałe dni tygodnia są przenoszone do poprzedniego tygodnia w %?
.
Więc możemy to zrobić:
startd = Date.new(2015, 8, 1)
# show whole month
pp (startd .. (startd >> 1)-1).map {|d|
origw = d.strftime('%U').to_i
# Adjust our new week number if not We-Sa:
neww = ([3, 4, 5, 6].include?(d.wday) ? origw : origw-1)
[d.to_s, origw, neww]
}
Jeśli chciał Sat-pt tydzień, można odjąć 1 do dni, które nie są w soboty:
d.wday == 6 ? origw : origw-1
Należy pamiętać, że istnieje kilka przypadki skrajne, w zależności od tego, co wybierzesz w danym tygodniu (obchodzenie się z nimi jest pozostawione jako ćwiczenie dla czytelnika). Dla naszego Śr-Czw tydzień:
- Rok 2014 zaczyna się od Wed, ale nasz algorytm stawia JAN 1 w tygodniu 0, ale powinno to być tydzień 1 (
%U
stawia 01 stycznia w tygodniu 1, jeżeli jest to niedziela).
- rok 2007 (i innych lat, które rozpoczynają się na pon lub wt) spowoduje dni przed pierwszym Wed być w tym tygodniu -1 ale powinny one być tydzień 0.
Im więcej dni tygodnia Po ponownym dopasowaniu, będziesz miał więcej przypadków na krawędzi. Największy problem będzie miał tydzień Sat-Fri, ponieważ dostosowujesz 6 z 7 dni.
może użyć tego standardu, a następnie obliczyć własne przesunięcie w oparciu o dzisiejszy dzień tygodnia ... – Randy
Niedziela -> sobota jest tylko amerykańskim standardem. Normą międzynarodową jest poniedziałek -> niedziela. – sawa