【问题标题】:PHP date incrementing errorPHP日期递增错误
【发布时间】:2015-10-05 15:07:44
【问题描述】:

我正在尝试创建一个日历,其中日期递增并且每个日期都是可点击的,它链接到搜索。奇怪的是日期停在25th October,并停止增加。即24th, 25th, 25th, 25th...

日历从哪一天开始(盯着它看了几天)并不重要,但在25th it stops incrementing

感谢任何建议。(间隙后的第二部分可能无关紧要,但包括它以防万一有任何链接)

for ($i = 1; $i <= 30; $i++){ 
    $date = date("d-m-Y", strtotime($date) + 86400);
    array_push($array_date, $date);
    $separatedate = explode('-', $date);   
    $getday = date("l", strtotime($date));
    print "<button class='submitsearch btn' value=$array_date[$i]>" . ltrim($separatedate[0], '0') . "<br>" . $getday . "<br></button>";

    if (!checkdate($separatedate[1] , $separatedate[0]+1 , $separatedate[2])) {
        $nextmonth = date("F", strtotime($date) + 86400);
       print "<strong>". $nextmonth . "</strong><hr/>";
    }
}

【问题讨论】:

    标签: php date increment


    【解决方案1】:

    这就是问题所在:

    $date = date("d-m-Y", strtotime($date) + 86400);
    

    您似乎依靠它来增加日期。通常情况下,这会很好......但由于夏令时的变化,我们有 25 小时的一天不是这样。

    我建议您使用旨在添加一天而不是添加 24 小时的日期/时间算术函数(例如 date_add)。或者确保 all 算术在 UTC 中完成,不会有任何时区更改。一般来说,我会尽量避免执行比您真正需要的更多的字符串转换:以惯用方式保留一个表示日期/时间的变量,并对其执行算术运算 - 然后只需 format 该变量当你需要的时候。如果您这样做,我认为没有必要在任何地方致电strtotime

    【讨论】:

    • 或者直接使用strtotime($date." + 1 day")
    • @BenPearlKahan:可能,但我通常建议在不需要时从混合中删除字符串转换。像这样格式化和解析是一个非常糟糕的主意,IMO。
    • 谢谢乔恩! Ben 做出了贡献。给 Jon 指出问题的功劳。对于那些想知道最终解决方案实施的人,我用创建一个新的 DateTime 对象替换了有问题的行: $date = new DateTime($date); $date->(new DateInterval('P1D'); $date = $date->format('d-m-Y'); 用于与其余代码集成:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多