【发布时间】:2019-04-02 03:08:02
【问题描述】:
为了获取当前一周的开始/结束日期(星期一/星期日),我使用以下代码几个月没有任何问题:
date_default_timezone_set('Europe/Bucharest'); //this is the default in php.ini
$monday = strtotime('next Monday -1 week');
$monday = date('w', $monday)==date('w') ? $monday+7*86400 : $monday;
$sunday = strtotime(date("Y-m-d",$monday)." +6 days");
echo "Current week start/end date:<br>";
echo $this_week_sd = date("Y-m-d",$monday)."<br>";
echo $this_week_ed = date("Y-m-d",$sunday)."<br>";
//Expected result:
2018-10-29
2018-11-04
但是,从今天开始,由于某种原因,这已经被抵消了 1 天:
//Actual incorrect result:
2018-10-28
2018-11-03
然后我记得昨天由于 DST,时钟回退了 1 小时,所以我决定将时区从欧洲/布加勒斯特更改为欧洲/伊斯坦布尔,它仍然比格林威治标准时间提前 +3 小时:
date_default_timezone_set('Europe/Istanbul');
//Now the result is correct:
2018-10-29
2018-11-04
问题是,如何在当前代码中抵消 DST,以便根据欧洲/布加勒斯特时区保持相对星期日期?任何指示或解释将不胜感激。谢谢。
【问题讨论】:
-
不是每一天都有 86400 秒,所以“幻数”一开始就不应该出现在你的代码中。你为什么要这样做?在之前的那一行中,您似乎仍然知道如何将给定的时间戳按一周来操作...
-
哇,我不敢相信我错过了。你是绝对正确的。现在切换到相对日期。
标签: php timezone dst timezone-offset