问题是,例如,在某些时区的秋季,凌晨 2:00 或凌晨 2:59 会翻倍,而在 DST 省时更改期间,春季不存在。
如果我在一整年中的每一分钟都运行一个 PHP 循环,我如何才能在循环中捕获 DST 节省时间?(在当前时区,由date_default_timezone_set设置)
我将如何完成 PHP 5.2 兼容功能,例如:
<?php
/** returns true if a time is skipped or doubled
* (for example "2013-03-10 02:30" doesen't exist in USA)
*
* @param string $season
* @param string $datestring in the form of "2013-03-10 02:30"
* @return boolean
**/
function checkDST($datestring,$season="any"){
$tz=date_default_timezone_get();
$season=strtolower(trim($season));
if($season=="spring"){
if(/* an hour skipped */) return true;
}else if($season=="autumn"){
if(/* double hour */) return true;
} else if($season=="any") {
if(/* any of both */) return true;
}
return false
}
所以我可以使用
date_default_timezone_set("America/New_York");
$is_skipped=checkDST("2013-03-10 02:30","spring");
和
$exists_two_times=checkDST(2003-11-03, 02:00,"autumn"); // or 2:59 for example
(时区见:http ://www.timeanddate.com/worldclock/clockchange.html?n=224&year=2013 )
编辑:
我发现了如何检测春季 DST:
function checkDST($datestring,$season="any"){
var_dump('checking '.$datestring);
$season=strtolower(trim($season));
$datestring=substr($datestring,0,16);
if($season!="autumn" and date("Y-m-d H:i",strtotime($datestring))!=$datestring) {
return true;
}
// check for double hours in autumn
...