# rddb.pm # # rhrdlibs # # Copyright (C) 2015 Christian Pointner # # This file is part of rhrdlibs. # # rhrdlibs is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # rhrdlibs is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with rhrdlibs. If not, see . # package RHRD::utils; use strict; use DateTime; use DateTime::TimeZone; sub get_rd_week { # # This computes the current Rivendell Week based on the number # of weeks since epoch. # # Explanation: # epoch was at 01.01.1970 which was a Thursday. # Monday in that week is (s-from-epoch + 3*24*60*60) seconds ago. # This needs to be adjusted by the timezone offset for Europe/Vienna # which is of course not constant (damn you daylight savings time) # Divide this by (7*24*60*60) and you get the number of # weeks since the Monday in the week of epoch adjusted for timezone offsets. # This week had week number 3 so add an offset of 2 and # get the modulo of 4. This rounded down gives you the current week # with 0 meaning Week 1. So add 1 to that number and you will get # the current RD week. # my $now = DateTime->now(); my $tz = DateTime::TimeZone->new(name => 'Europe/Vienna'); my $tz_offset = $tz->offset_for_datetime($now); my $sEpoch = $now->epoch() + $tz_offset; my $week = floor(((($sEpoch + 259200)/604800) + 2) % 4) + 1; return $week; } return 1;