blob: 083f6579d34b9b01a557cba13131c91dcda4ad5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# rddb.pm
#
# rhrdlibs
#
# Copyright (C) 2015 Christian Pointner <equinox@helsinki.at>
#
# 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 <http://www.gnu.org/licenses/>.
#
package RHRD::utils;
use strict;
use POSIX;
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;
|