相对日期计算关闭

时间:2015-09-03 16:42:09

标签: php date datetime

我正在尝试计算相对于特定日期的日期,但我得到了一些非常不寻常的回复。谁能解释我做错了什么?如果重要,我是美国东部时间。

 <?php

        $firstweek_firsttime = date('D M j', strtotime("June 2016 first Sunday"));//June 19th 2016
        $firstweek_lasttime = date('D M j', strtotime("June 2016 second Saturday"));

    $ret=array(
        "Session #1. The week of ".$firstweek_firsttime." to ".$firstweek_lasttime." - ",
        "Session #2. The week of ".date('D M j', strtotime("$firstweek_firsttime next Sunday"))." to ".date('D M j', strtotime("$firstweek_lasttime next Saturday"))." - ",
        "Session #3. The week of ".date('D M j', strtotime("$firstweek_firsttime +10 day"))." to ".date('D M j', strtotime("$firstweek_lasttime +10 day"))." - "
        );


        ?>
        <ul>
        <?php
        foreach($ret as $wk)
        {
        ?>
            <li><?php echo($wk);?></li>
        <?php           
        }
?>

我得到的是什么:

The week of Sun Jun 19 to Sat Jun 18 -
The week of Thu Jan 1 to Thu Jan 1 -
The week of Wed Jul 1 to Tue Jun 30 -

目标:

The week of Sun Jun 19 to Sat Jun 25 - 
The week of Sun Jun 26 to Sat Jul 2 - 
The week of Sun Jul 3 to Sat Jul 9 - 

1 个答案:

答案 0 :(得分:1)

这适合我。

你&#34;你&#34;除非您设置时区,否则与您的日期无关。 日期/时间根据服务器位置设置。

这有点麻烦,如果我能找到更好的方法,我会更新我的答案。

<强>更新

strtotime("$firstweek_firsttime");相当于写strtotime("Sun Jun 5");将输出1433635200(截至今天,实际上是2015年6月7日00:00:00)因为没有指示年份,服务器默认为当年

strtotime("next sunday");将输出1441497600(截至今天,等于2015年9月6日星期日00:00:00

strtotime("$firstweek_firsttime next sunday");是无效的标记,不会输出任何内容 所以,由于时间戳为空,日期自动设置为1970年1月1日
strtotime("$firstweek_lasttime next Saturday")

也是如此

strtotime("$firstweek_firsttime +10 days")strtotime("Sun Jun 5 +10 days")相同 没有年份,服务器默认为当前年份并将其写为strtotime("Sun Jun 7 2015 +10 days"),因为6月7日是2015年6月的第一个星期日
strtotime("$firstweek_lasttime +10 day")

也是如此

所有这一切......你的问题的简单解决方案是将年份添加到$ firstweek_firsttime和$ firstweek_lasttime的日期格式中。这将使您的日期保持在您期望的那一年......

<?php

    $firstweek_firsttime = date('D M j Y', strtotime("June 2016 first Sunday")); // Sun Jun 5 2016
    $firstweek_lasttime = date('D M j Y', strtotime("June 2016 second Saturday"));

如果您不想将年份输出到浏览器,只需将您的第一个数组项目更改为...
"Session #1. The week of ".date('D M j', strtotime("$firstweek_firsttime"))." to ".date('D M j', strtotime("$firstweek_lasttime"))." - ",

<强>参考

modify date