在PHP中,date('I')
会告诉我夏令时是否有效。这是否告诉我DST是否专门用于我服务器配置的时区,或者它是否有效期?
我在亚利桑那州,我们没有观察夏令时。所以我需要我的服务器才能认识到,比如纽约现在提前2个小时,但是当DST在明年3月开始时,它比我提前3个小时。
更新
鉴于评论是我的服务器配置的时区,我如何确定我的服务器时区与某个任意时区之间的当前时差,知道该值在一年中会发生变化?
答案 0 :(得分:3)
PHP将遵守服务器的默认时区,因此如果您的服务器配置正确,则日期('I')将始终在亚利桑那州返回false。
您可以暂时将默认时区更改为观察夏令时的区域。要更改默认时区,请使用date_default_timezone_set()所示的here。
答案 1 :(得分:0)
这是我的操作方式:
SELECT idProj, idStep
FROM table t
WHERE t.idStep = (SELECT max(idStep)
FROM table t2
WHERE t2.idProj = t.idProj
);
答案 2 :(得分:0)
您不必更改服务器时区并确定 DST 当前是否有效。这是一个简单的方法:
function isDst($timezone) {
$date = new DateTime('now', new DateTimeZone($timezone));
return (bool) $date->format('I');
}
// isDst(date_default_timezone_get()) for server timezone
// isDst('America/Los_Angeles')
要确定两个时区之间的时差:
function getTimezoneDiff($tz1, $tz2) {
$date1 = new DateTime('today', new DateTimeZone($tz1));
$date2 = new DateTime('today', new DateTimeZone($tz2));
// Get the difference in seconds
$secondsDiff = $date2->getTimestamp() - $date1->getTimestamp();
// Some magic to format the time difference
$timeDiff = gmdate('H:i:s', abs($secondsDiff));
return (($secondsDiff > 0) ? '' : '-') . $timeDiff;
}
// getTimezoneDiff('America/Los_Angeles', 'Asia/Kolkata') ==> '-12:30:30'
注意:负返回值表示 $tz1
落后于 $tz2
。
如果您的应用中有大量日期时间操作,您可以使用 Carbon 库,这样可以轻而易举地进行日期时间计算。