mirror of
https://github.com/rlanvin/php-rrule.git
synced 2025-02-17 06:54:15 +01:00
Fix a bug with year 2038 on 32bits systems
There was still a few mktime() left. They have been replaced by DateTime.
This commit is contained in:
parent
5f409deae9
commit
b3ec2fb271
@ -579,7 +579,7 @@ class RRule implements \Iterator, \ArrayAccess
|
||||
// we need some more variables before we continue
|
||||
list($year, $month, $day, $yearday, $weekday) = explode(' ',$date->format('Y n j z N'));
|
||||
$masks = array();
|
||||
$masks['weekday_of_1st_yearday'] = date('N', mktime(0,0,0,1,1,$year));
|
||||
$masks['weekday_of_1st_yearday'] = date_create($year.'-01-01 00:00:00')->format('N');
|
||||
$masks['yearday_to_weekday'] = array_slice(self::$WEEKDAY_MASK, $masks['weekday_of_1st_yearday']-1);
|
||||
if ( is_leap_year($year) ) {
|
||||
$masks['year_len'] = 366;
|
||||
@ -795,7 +795,7 @@ class RRule implements \Iterator, \ArrayAccess
|
||||
// during the previous year), because that would generate
|
||||
// negative indexes (which would not work with the masks)
|
||||
$set = array();
|
||||
$i = (int) date('z', mktime(0,0,0,$month,$day,$year));
|
||||
$i = (int) date_create($year.'-'.$month.'-'.$day.' 00:00:00')->format('z');
|
||||
$start = $i;
|
||||
for ( $j = 0; $j < 7; $j++ ) {
|
||||
$set[] = $i;
|
||||
@ -810,8 +810,8 @@ class RRule implements \Iterator, \ArrayAccess
|
||||
case self::HOURLY:
|
||||
case self::MINUTELY:
|
||||
case self::SECONDLY:
|
||||
$n = (int) date('z', mktime(0,0,0,$month,$day,$year));
|
||||
return array($n);
|
||||
$i = (int) date_create($year.'-'.$month.'-'.$day.' 00:00:00')->format('z');
|
||||
return array($i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -967,7 +967,7 @@ class RRule implements \Iterator, \ArrayAccess
|
||||
// or week number 1 got days from last year, so there are no
|
||||
// days from last year's last week number in this year.
|
||||
if ( ! in_array(-1, $this->byweekno) ) {
|
||||
$weekday_of_1st_yearday = date('N', mktime(0,0,0,1,1,$year-1));
|
||||
$weekday_of_1st_yearday = date_create(($year-1).'-01-01 00:00:00')->format('N');
|
||||
$first_wkst_offset_last_year = (7 - $weekday_of_1st_yearday + $this->wkst) % 7;
|
||||
$last_year_len = 365 + is_leap_year($year - 1);
|
||||
if ( $first_wkst_offset_last_year >= 4) {
|
||||
@ -1152,7 +1152,7 @@ class RRule implements \Iterator, \ArrayAccess
|
||||
$masks['leap_year'] = is_leap_year($year);
|
||||
$masks['year_len'] = 365 + (int) $masks['leap_year'];
|
||||
$masks['next_year_len'] = 365 + is_leap_year($year + 1);
|
||||
$masks['weekday_of_1st_yearday'] = date('N', mktime(0,0,0,1,1,$year));
|
||||
$masks['weekday_of_1st_yearday'] = date_create($year."-01-01 00:00:00")->format('N');
|
||||
$masks['yearday_to_weekday'] = array_slice(self::$WEEKDAY_MASK, $masks['weekday_of_1st_yearday']-1);
|
||||
if ( $masks['leap_year'] ) {
|
||||
$masks['yearday_to_month'] = self::$MONTH_MASK_366;
|
||||
|
@ -1323,14 +1323,9 @@ class RRuleTest extends PHPUnit_Framework_TestCase
|
||||
'dtstart' => '1997-02-02 09:00:00',
|
||||
'count' => 1
|
||||
)),
|
||||
// every 52 weeks, in November, starting in July (not going to happen)
|
||||
array(array(
|
||||
'freq' => 'weekly',
|
||||
'interval' => 52,
|
||||
'bymonth' => 11,
|
||||
'dtstart' => '2015-07-01 09:00:00',
|
||||
'count' => 1
|
||||
)),
|
||||
|
||||
// haven't found a weekly rule with no occurence yet
|
||||
|
||||
// every 7 days, monday, starting a wednesday (still nope)
|
||||
array(array(
|
||||
'freq' => 'daily',
|
||||
@ -1488,6 +1483,15 @@ class RRuleTest extends PHPUnit_Framework_TestCase
|
||||
date_create('2015-07-01 09:00:30'),
|
||||
date_create('2016-07-01 09:00:15'))
|
||||
),
|
||||
// every 52 weeks, in November, starting in July (will happen in 2185 - to test year 2038 problem)
|
||||
array(array(
|
||||
'freq' => 'weekly',
|
||||
'interval' => 52,
|
||||
'bymonth' => 11,
|
||||
'dtstart' => '2015-07-01 09:00:00',
|
||||
'count' => 1), array(
|
||||
date_create('2185-11-30 09:00:00')
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user