Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 1.5.0a4

Bug #8912 putenv causes crashes in DateTimeZone::inDaylightTime under windows.
Submitted: 2006-10-09 01:33 UTC
From: doconnor Assigned: firman
Status: Assigned Package: Date (version 1.4.6)
PHP Version: 5.1.6 OS:
Roadmaps: (Not assigned)    
Subscription  


 [2006-10-09 01:33 UTC] doconnor (Daniel O'Connor)
Description: ------------ putenv causes crashes in DateTimeZone::inDaylightTime under windows. See attached cachegrind file. See also: http://pear.php.net/bugs/bug.php?id=434 http://pear.php.net/bugs/bug.php?id=6246 and the patch which introduced this is detailed in http://pear.php.net/bugs/bug.php?id=1180 commenting out the putenv() calls prevents crashing but obviously produces incorrect results. PEAR::Date should make sure that the TZ it is trying to insert is 'safe' - checking before writing to the registry Test script: --------------- <?php require_once 'Date.php'; $states = array( 1 => 'Australia/Adelaide', 2 => 'Australia/Canberra', 3 => 'Australia/Darwin', 4 => 'Australia/Brisbane', 5 => 'Australia/Hobart', 6 => 'Australia/Melbourne', 7 => 'Australia/Perth', 8 => 'Australia/Sydney' ); $originalTimezone = new Date_TimeZone('Australia/Adelaide'); $n = 0; while ($n < 10) { $new_date = new Date(time()); print "old\n"; print $new_date->getTime() . "\n"; $timezone = new Date_TimeZone($states[$n++]); $new_date->setTZ($originalTimezone); $new_date->convertTZ($timezone); print "new\n"; print $new_date->getTime() . "\n"; } Expected result: ---------------- old (timestamp) new (timestamp) ... etc Actual result: -------------- version: 0.9.6 cmd: C:\vx\tests\pearDate.php part: 1 events: Time fl=php:internal fn=php::getenv 4638 331 fl=php:internal fn=php::getenv 4640 90 fl=php:internal fn=php::date 4642 1058 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone::isValidID 4642 231 fl=php:internal fn=php::date 4643 262 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone::isValidID 165 59 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone::setDefault 4643 898 cfn=Date_TimeZone::isValidID calls=1 0 0 165 59 fl=c:\php\PEAR\Date\TimeZone.php fn=require_once::c:\php\PEAR\Date\TimeZone.php 1 75187 cfn=php::getenv calls=1 0 0 4638 331 cfn=php::getenv calls=1 0 0 4640 90 cfn=php::date calls=1 0 0 4642 1058 cfn=Date_TimeZone::isValidID calls=1 0 0 4642 231 cfn=php::date calls=1 0 0 4643 262 cfn=Date_TimeZone::setDefault calls=1 0 0 4643 958 fl=php:internal fn=php::defined 39 240 fl=php:internal fn=php::define 46 81 fl=php:internal fn=php::defined 49 90 fl=php:internal fn=php::define 58 40 fl=c:\php\PEAR\Date\Calc.php fn=require_once::c:\php\PEAR\Date\Calc.php 1 1456 cfn=php::defined calls=1 0 0 39 240 cfn=php::define calls=1 0 0 46 81 cfn=php::defined calls=1 0 0 49 90 cfn=php::define calls=1 0 0 58 40 fl=php:internal fn=php::define 65 59 fl=c:\php\PEAR\Date\Span.php fn=require_once::c:\php\PEAR\Date\Span.php 1 7779 cfn=php::define calls=1 0 0 65 59 fl=php:internal fn=php::define 50 40 fl=php:internal fn=php::define 54 40 fl=php:internal fn=php::define 58 40 fl=php:internal fn=php::define 62 40 fl=php:internal fn=php::define 66 50 fl=php:internal fn=php::define 70 50 fl=c:\php\PEAR\Date.php fn=require_once::c:\php\PEAR\Date.php 1 588028 cfn=require_once::c:\php\PEAR\Date\TimeZone.php calls=1 0 0 39 78120 cfn=require_once::c:\php\PEAR\Date\Calc.php calls=1 0 0 40 1909 cfn=require_once::c:\php\PEAR\Date\Span.php calls=1 0 0 41 7839 cfn=php::define calls=1 0 0 50 40 cfn=php::define calls=1 0 0 54 40 cfn=php::define calls=1 0 0 58 40 cfn=php::define calls=1 0 0 62 40 cfn=php::define calls=1 0 0 66 50 cfn=php::define calls=1 0 0 70 50 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->isValidID 116 131 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->Date_TimeZone 14 886 cfn=Date_TimeZone->isValidID calls=1 0 0 116 131 fl=php:internal fn=php::time 18 19 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->isValidID 116 71 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->Date_TimeZone 151 457 cfn=Date_TimeZone->isValidID calls=1 0 0 116 71 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->getDefault 155 460 cfn=Date_TimeZone->Date_TimeZone calls=1 0 0 151 529 fl=php:internal fn=php::is_null 156 59 fl=php:internal fn=php::is_a 158 40 fl=php:internal fn=php::preg_match 181 2369 fl=php:internal fn=php::is_numeric 203 19 fl=php:internal fn=php::date 205 557 fl=php:internal fn=php::preg_match 181 269 fl=c:\php\PEAR\Date.php fn=Date->setDate 205 789 cfn=php::preg_match calls=1 0 0 181 269 fl=c:\php\PEAR\Date.php fn=Date->setDate 161 1213 cfn=php::preg_match calls=1 0 0 181 2369 cfn=php::is_numeric calls=1 0 0 203 19 cfn=php::date calls=1 0 0 205 557 cfn=Date->setDate calls=1 0 0 205 1058 fl=c:\php\PEAR\Date.php fn=Date->Date 18 1471 cfn=Date_TimeZone->getDefault calls=1 0 0 155 989 cfn=php::is_null calls=1 0 0 156 59 cfn=php::is_a calls=1 0 0 158 40 cfn=Date->setDate calls=1 0 0 161 5218 fl=php:internal fn=php::mktime 259 407 fl=c:\php\PEAR\Date.php fn=Date->getDate 471 522 cfn=php::mktime calls=1 0 0 259 407 fl=c:\php\PEAR\Date.php fn=Date->getTime 20 319 cfn=Date->getDate calls=1 0 0 471 929 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->isValidID 116 69 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->Date_TimeZone 21 569 cfn=Date_TimeZone->isValidID calls=1 0 0 116 69 fl=php:internal fn=php::is_a 489 78 fl=c:\php\PEAR\Date.php fn=Date->setTZ 22 321 cfn=php::is_a calls=1 0 0 489 78 fl=php:internal fn=php::getenv 263 100 fl=php:internal fn=php::putenv 266 1010 fl=php:internal fn=php::mktime 259 388 fl=c:\php\PEAR\Date.php fn=Date->getDate 471 431 cfn=php::mktime calls=1 0 0 259 388 fl=c:\php\PEAR\Date.php fn=Date->getTime 267 338 cfn=Date->getDate calls=1 0 0 471 820 fl=php:internal fn=php::localtime 267 391 fl=php:internal fn=php::putenv 268 770 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->inDaylightTime 305 3831 cfn=php::getenv calls=1 0 0 263 100 cfn=php::putenv calls=1 0 0 266 1010 cfn=Date->getTime calls=1 0 0 267 1158 cfn=php::localtime calls=1 0 0 267 391 cfn=php::putenv calls=1 0 0 268 770 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->getOffset 563 576 cfn=Date_TimeZone->inDaylightTime calls=1 0 0 305 7262 fl=php:internal fn=php::getenv 263 78 fl=php:internal fn=php::putenv 266 510 fl=php:internal fn=php::mktime 259 698 fl=c:\php\PEAR\Date.php fn=Date->getDate 471 591 cfn=php::mktime calls=1 0 0 259 698 fl=c:\php\PEAR\Date.php fn=Date->getTime 267 1108 cfn=Date->getDate calls=1 0 0 471 1289 fl=php:internal fn=php::localtime 267 269 fl=php:internal fn=php::putenv 268 579 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->inDaylightTime 305 1273 cfn=php::X1 calls=1 0 0 263 78 cfn=php::putenv calls=1 0 0 266 510 cfn=Date->getTime calls=1 0 0 267 2398 cfn=php::localtime calls=1 0 0 267 269 cfn=php::putenv calls=1 0 0 268 579 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->getOffset 564 538 cfn=Date_TimeZone->inDaylightTime calls=1 0 0 305 5109 fl=php:internal fn=php::abs 564 78 fl=php:internal fn=php::intval 564 21 fl=php:internal fn=php::is_a 153 78 fl=php:internal fn=php::is_a 155 30 fl=php:internal fn=php::is_array 157 21 fl=php:internal fn=php::is_string 159 11 fl=php:internal fn=php::is_int 161 9 fl=php:internal fn=php::intval 418 21 fl=php:internal fn=php::floor 419 19 fl=php:internal fn=php::floor 420 159 fl=php:internal fn=php::floor 421 19 fl=php:internal fn=php::intval 421 21 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->setFromSeconds 162 1931 cfn=php::intval calls=1 0 0 418 21 cfn=php::floor calls=1 0 0 419 19 cfn=php::floor calls=1 0 0 420 159 cfn=php::floor calls=1 0 0 421 19 cfn=php::intval calls=1 0 0 421 21 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->set 129 2145 cfn=php::is_a calls=1 0 0 153 78 cfn=php::is_a calls=1 0 0 155 30 cfn=php::is_array calls=1 0 0 157 21 cfn=php::is_string calls=1 0 0 159 11 cfn=php::is_int calls=1 0 0 161 9 cfn=Date_Span->setFromSeconds calls=1 0 0 162 2171 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->Date_Span 699 498 cfn=Date_Span->set calls=1 0 0 129 4470 fl=php:internal fn=php::is_a 712 90 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->isEmpty 715 100 fl=php:internal fn=php::substr 233 59 fl=php:internal fn=php::substr 234 19 fl=php:internal fn=php::floor 247 28 fl=php:internal fn=php::floor 248 21 fl=php:internal fn=php::floor 249 21 fl=c:\php\PEAR\Date\Calc.php fn=Date_Calc->dateToDays 743 1468 cfn=php::substr calls=1 0 0 233 59 cfn=php::substr calls=1 0 0 234 19 cfn=php::floor calls=1 0 0 247 28 cfn=php::floor calls=1 0 0 248 21 cfn=php::floor calls=1 0 0 249 21 fl=php:internal fn=php::floor 267 9 fl=php:internal fn=php::floor 268 19 fl=php:internal fn=php::floor 269 19 fl=php:internal fn=php::floor 271 19 fl=php:internal fn=php::floor 272 21 fl=php:internal fn=php::floor 273 19 fl=php:internal fn=php::floor 275 21 fl=php:internal fn=php::floor 276 9 fl=php:internal fn=php::floor 277 19 fl=php:internal fn=php::sprintf 289 159 fl=php:internal fn=php::sprintf 290 40 fl=php:internal fn=php::checkdate 1760 59 fl=c:\php\PEAR\Date\Calc.php fn=Date_Calc->isValidDate 121 350 cfn=php::checkdate calls=1 0 0 1760 59 fl=php:internal fn=php::strlen 129 19 fl=php:internal fn=php::substr 130 28 fl=php:internal fn=php::substr 132 19 fl=php:internal fn=php::strlen 129 21 fl=php:internal fn=php::substr 130 21 fl=php:internal fn=php::substr 132 9 fl=php:internal fn=php::sprintf 159 38 fl=php:internal fn=php::strlen 129 11 fl=php:internal fn=php::substr 130 19 fl=php:internal fn=php::substr 132 19 fl=php:internal fn=php::sprintf 147 28 fl=php:internal fn=php::strlen 129 9 fl=c:\php\PEAR\Date\Calc.php fn=Date_Calc->dateFormat 291 5092 cfn=Date_Calc->isValidDate calls=1 0 0 121 410 cfn=php::strlen calls=1 0 0 129 19 cfn=php::substr calls=1 0 0 130 28 cfn=php::substr calls=1 0 0 132 19 cfn=php::strlen calls=1 0 0 129 21 cfn=php::substr calls=1 0 0 130 21 cfn=php::substr calls=1 0 0 132 9 cfn=php::sprintf calls=1 0 0 159 38 cfn=php::strlen calls=1 0 0 129 11 cfn=php::substr calls=1 0 0 130 19 cfn=php::substr calls=1 0 0 132 19 cfn=php::sprintf calls=1 0 0 147 28 cfn=php::strlen calls=1 0 0 129 9 fl=c:\php\PEAR\Date\Calc.php fn=Date_Calc->daysToDate 747 5204 cfn=php::floor calls=1 0 0 267 9 cfn=php::floor calls=1 0 0 268 19 cfn=php::floor calls=1 0 0 269 19 cfn=php::floor calls=1 0 0 271 19 cfn=php::floor calls=1 0 0 272 21 cfn=php::floor calls=1 0 0 273 19 cfn=php::floor calls=1 0 0 275 21 cfn=php::floor calls=1 0 0 276 9 cfn=php::floor calls=1 0 0 277 19 cfn=php::sprintf calls=1 0 0 289 159 cfn=php::sprintf calls=1 0 0 290 40 cfn=Date_Calc->dateFormat calls=1 0 0 291 5748 fl=php:internal fn=php::sscanf 747 219 fl=php:internal fn=php::intval 748 30 fl=php:internal fn=php::intval 749 19 fl=php:internal fn=php::intval 750 21 fl=c:\php\PEAR\Date.php fn=Date->subtractSpan 699 3368 cfn=php::is_a calls=1 0 0 712 90 cfn=Date_Span->isEmpty calls=1 0 0 715 100 cfn=Date_Calc->dateToDays calls=1 0 0 743 1618 cfn=Date_Calc->daysToDate calls=1 0 0 747 11310 cfn=php::sscanf calls=1 0 0 747 219 cfn=php::intval calls=1 0 0 748 30 cfn=php::intval calls=1 0 0 749 19 cfn=php::intval calls=1 0 0 750 21 fl=c:\php\PEAR\Date.php fn=Date->subtractSeconds 564 1020 cfn=Date_Span->Date_Span calls=1 0 0 699 4968 cfn=Date->subtractSpan calls=1 0 0 699 16779 fl=php:internal fn=php::getenv 263 169 fl=php:internal fn=php::putenv 266 669 fl=php:internal fn=php::mktime 259 629 fl=c:\php\PEAR\Date.php fn=Date->getDate 471 469 cfn=php::mktime calls=1 0 0 259 629 fl=c:\php\PEAR\Date.php fn=Date->getTime 267 331 cfn=Date->getDate calls=1 0 0 471 1099 fl=php:internal fn=php::localtime 267 300 fl=php:internal fn=php::putenv 268 588 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->inDaylightTime 305 1330 cfn=php::getenv calls=1 0 0 263 169 cfn=php::putenv calls=1 0 0 266 669 cfn=Date->getTime calls=1 0 0 267 1430 cfn=php::localtime calls=1 0 0 267 300 cfn=php::putenv calls=1 0 0 268 588 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->getOffset 569 519 cfn=Date_TimeZone->inDaylightTime calls=1 0 0 305 4489 fl=php:internal fn=php::getenv 263 78 fl=php:internal fn=php::putenv 266 491 fl=php:internal fn=php::mktime 259 751 fl=c:\php\PEAR\Date.php fn=Date->getDate 471 469 cfn=php::mktime calls=1 0 0 259 751 fl=c:\php\PEAR\Date.php fn=Date->getTime 267 548 cfn=Date->getDate calls=1 0 0 471 1220 fl=php:internal fn=php::localtime 267 298 fl=php:internal fn=php::putenv 268 579 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->inDaylightTime 305 1194 cfn=php::putenv calls=1 0 0 263 78 cfn=php::putenv calls=1 0 0 266 491 cfn=Date->getTime calls=1 0 0 267 1769 cfn=php::localtime calls=1 0 0 267 298 cfn=php::putenv calls=1 0 0 268 579 fl=c:\php\PEAR\Date\TimeZone.php fn=Date_TimeZone->getOffset 572 488 cfn=Date_TimeZone->inDaylightTime calls=1 0 0 305 4410 fl=php:internal fn=php::abs 572 19 fl=php:internal fn=php::intval 572 21 fl=php:internal fn=php::is_a 153 78 fl=php:internal fn=php::is_a 155 40 fl=php:internal fn=php::is_array 157 30 fl=php:internal fn=php::is_string 159 9 fl=php:internal fn=php::is_int 161 21 fl=php:internal fn=php::intval 418 19 fl=php:internal fn=php::floor 419 28 fl=php:internal fn=php::floor 420 28 fl=php:internal fn=php::floor 421 21 fl=php:internal fn=php::intval 421 19 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->setFromSeconds 162 1752 cfn=php::intval calls=1 0 0 418 19 cfn=php::floor calls=1 0 0 419 28 cfn=php::floor calls=1 0 0 420 28 cfn=php::floor calls=1 0 0 421 21 cfn=php::intval calls=1 0 0 421 19 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->set 129 2079 cfn=php::is_a calls=1 0 0 153 78 cfn=php::is_a calls=1 0 0 155 40 cfn=php::is_array calls=1 0 0 157 30 cfn=php::is_string calls=1 0 0 159 9 cfn=php::is_int calls=1 0 0 161 21 cfn=Date_Span->setFromSeconds calls=1 0 0 162 1869 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->Date_Span 699 472 cfn=Date_Span->set calls=1 0 0 129 4129 fl=php:internal fn=php::is_a 712 69 fl=c:\php\PEAR\Date\Span.php fn=Date_Span->isEmpty 715 71 fl=c:\php\PEAR\Date.php fn=Date->subtractSpan 699 538 cfn=php::is_a calls=1 0 0 712 69 cfn=Date_Span->isEmpty calls=1 0 0 715 71 fl=c:\php\PEAR\Date.php fn=èß->subtractSeconds 572 898 cfn=Date_Span->Date_Span calls=1 0 0 699 4601 cfn=Date->subtractSpan calls=1 0 0 699 679 fl=c:\php\PEAR\Date.php fn=Date->convertTZ 23 3404 cfn=Date_TimeZone->getOffset calls=1 0 0 563 7839 cfn=Date_TimeZone->getOffset calls=1 0 0 564 5648 cfn=php::ðîTC calls=1 0 0 564 78 cfn=php::intval calls=1 0 0 564 21 cfn=Date->subtractSeconds calls=1 0 0 564 22768 cfn=Date_TimeZone->getOffset calls=1 0 0 569 5009 cfn=Date_TimeZone->getOffset calls=1 0 0 572 4899 cfn=php::abs calls=1 0 0 572 19 cfn=php::intval calls=1 0 0 572 21 cfn=èß->subtractSeconds calls=1 0 0 572 6179

Comments

 [2006-11-14 03:45 UTC] firman (Firman Wandayandi)
 [2006-11-14 10:31 UTC] doconnor at php dot net (Daniel O'Connor)
It no longer crashes with this patch.
 [2006-11-14 11:30 UTC] firman (Firman Wandayandi)
This bug has been fixed in CVS. If this was a documentation problem, the fix will appear on pear.php.net by the end of next Sunday (CET). If this was a problem with the pear.php.net website, the change should be live shortly. Otherwise, the fix will appear in the package's next release. Thank you for the report and for helping us make PEAR better. Okay, great! So I closed this bug.
 [2009-01-01 08:03 UTC] doconnor (Daniel O'Connor)
At the moment, this test is failing in CVS. 17) /home/clockwerx/pear/Date/tests/bugs/bug-8912.phpt --- Expected +++ Actual @@ -1,47 +1,47 @@ -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Adelaide: 1188561599 -Difference: 0 -Australia/Adelaide: 1188561599 -Difference: 0 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Canberra: 1188561599 -Difference: 0 -Australia/Canberra: 1188563399 -Difference: 1800 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Darwin: 1188561599 -Difference: 0 -Australia/Darwin: 1188561599 -Difference: 0 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Brisbane: 1188561599 -Difference: 0 -Australia/Brisbane: 1188563399 -Difference: 1800 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Hobart: 1188561599 -Difference: 0 -Australia/Hobart: 1188563399 -Difference: 1800 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Melbourne: 1188561599 -Difference: 0 -Australia/Melbourne: 1188563399 -Difference: 1800 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Perth: 1188561599 -Difference: 0 -Australia/Perth: 1188556199 -Difference: -5400 - -Original Time (Australia/Adelaide): 01:00 1188561599 -Australia/Sydney: 1188561599 -Difference: 0 -Australia/Sydney: 1188563399 -Difference: 1800 \ No newline at end of file +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Adelaide: 943885800 +Difference: -244675799 +Australia/Adelaide: 943885800 +Difference: -244675799 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Canberra: 943885800 +Difference: -244675799 +Australia/Canberra: 943887600 +Difference: -244673999 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Darwin: 943885800 +Difference: -244675799 +Australia/Darwin: 943885800 +Difference: -244675799 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Brisbane: 943885800 +Difference: -244675799 +Australia/Brisbane: 943887600 +Difference: -244673999 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Hobart: 943885800 +Difference: -244675799 +Australia/Hobart: 943887600 +Difference: -244673999 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Melbourne: 943885800 +Difference: -244675799 +Australia/Melbourne: 943887600 +Difference: -244673999 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Perth: 1230733800 +Difference: 42172201 +Australia/Perth: 1230728400 +Difference: 42166801 + +Original Time (Australia/Adelaide): 09:30 943885800 +Australia/Sydney: 943885800 +Difference: -244675799 +Australia/Sydney: 943887600 +Difference: -244673999 \ No newline at end of file /home/clockwerx/pear/AllTests.php:136 /home/clockwerx/pear/AllTests.php:525
 [2009-01-01 08:10 UTC] doconnor (Daniel O'Connor)
Looks like new Date(time()); doesn't do what the test thought it did
 [2009-01-01 08:43 UTC] doconnor (Daniel O'Connor)
Spun off problem to Bug #15478
 [2009-01-01 08:52 UTC] doconnor (Daniel O'Connor)
 [2018-09-18 21:24 UTC] weather (Rick Yust)
Unit test patched as of https://github.com/pear/Date/commit/ee6e1ff Also modified a minor(?) part of the expectations as part of the patch.