Мы можем выяснить, как перенести номер недели от того, что возвращаемый %U
(ВС начинается неделя), рассматривая этот календарный фрагмент:
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
Давайте путь мы хотим Wed- Tue week, сокращенно формат %?
(поэтому нам не нужно печатать «Wed начинается неделя»).
Мы хотим:
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
Обратите внимание, как мы-Sa пребывание в одной и той же номер недели в обеих системах, в то время как все остальные дни недели перемещаются к предыдущей неделе в %?
.
Таким образом, мы можем сделать это:
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]
}
Если вы хотите сб-пт неделю, вы можете вычесть 1 в течение нескольких дней, не суббота:
d.wday == 6 ? origw : origw-1
Обратите внимание, что есть пара в зависимости от того, что вы выбираете для своей недели (обработка этих данных оставлена как упражнение для читателя). Для нашего Ср-Вс неделю:
- год 2014 начинается с ср, но наш алгоритм ставит 1 янв в неделю 0, но это должно быть 1 неделя (
%U
ставит 1 января в 1-й неделе, если это воскресенье). 2007
- года (и другие года, которые начинаются в пне или вт) будут вызывать дни до первого сра быть в неделе -1, но они должны быть неделя 0.
Чем больше дней недели вы «Приспосабливаясь, тем больше случаев, которые у вас будут. Сат-Fri неделю, вероятно, будет больше проблем, потому что вы корректируете 6 из 7 дней.
возможно использовать этот стандарт, а затем рассчитать собственный счет на основе сегодняшнего дня недели ... – Randy
Воскресенье -> Суббота - только американский стандарт. Международный стандарт - понедельник -> воскресенье. – sawa