【问题标题】:php - issue in increase days-datephp - 增加天数的问题
【发布时间】:2017-11-07 06:55:48
【问题描述】:

我尝试在 m-d-Y 中增加天数(60),但它计算错误的日期。它被认为是 d-m-y 格式。

echo "Today is :: ".date("m-d-Y"); 
echo "\n";       
echo $DateEnd = date('m-d-Y', strtotime(date("m-d-Y") . ' +60 day'));

输出是 ::

Today is :: 11-07-2017
End date is :: 09-09-2017

代码:https://3v4l.org/jmT9a

我们将不胜感激任何帮助或建议

【问题讨论】:

  • 您无需在strtotime 中提供额外的date() 格式,参见示例3v4l.org/RDo5P

标签: php date strtotime days


【解决方案1】:

问题原因:- strtotime() 注意部分:-

m/d/y 或 d-m-y 格式的日期可以通过查看来消除歧义 在各个组件之间的分隔符处:如果分隔符是 斜线 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),然后是欧洲 d-m-y 格式 假设。但是,如果年份以两位数格式给出,并且 分隔符是一个破折号(-,日期字符串被解析为 y-m-d。

所以m-d-Y 是无法识别的格式,同时将天数添加到 php 日期。

像下面这样:-

<?php

echo "Today is :: ".date("m-d-Y"); 
echo "\n";       
echo $DateEnd = date('m-d-Y', strtotime(date("y-m-d") . '+60 days'));

输出:-https://eval.in/894300

同时检查可能的Php date formats

【讨论】:

    【解决方案2】:

    试试这个,它会为你工作

    <?php
    
    echo "Current Date: ".date("m-d-Y");
    echo "\n";
    echo $contractDateEnd = date('m-d-Y', strtotime(date("d-m-Y") . ' +60 day'));
    ?>
    

    【讨论】:

      【解决方案3】:

      你也可以使用dateinterval:

      var_dump (date_create()->add(date_interval_create_from_date_string('60 days')));
      

      Test at ideone

      【讨论】:

        【解决方案4】:

        阅读来自PHP Manual的说明:

        注意: m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。但是,如果年份以两位数格式给出并且分隔符是破折号(-,则日期字符串被解析为 y-m-d。 为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。

        所以你需要使用

        echo date("m-d-Y");
        echo "\n";
        echo $contractDateEnd = date('m-d-Y', strtotime(date("m/d/Y") . ' +60 day'));
        

        DEMO

        【讨论】:

          【解决方案5】:

          您的代码有几个问题:它获取当前时间(数字)并将当前日期格式化为字符串,然后(在将“+60 天”连接到它之后)它再次将其解析为数字以格式化它再次作为字符串。大量无用且耗电的操作。真正的麻烦是您使用的custom date format 日期,并且有充分的理由不受PHP 的支持。

          使用DateTime 类来处理日期和时间操作。它优于旧的date()strtotime() 和其他日期和时间功能。可以处理多个时区,代码更短更清晰:

          $now = new DateTime();
          $end = new DateTime();
          $end->add(new DateInterval('P60D'));
          
          echo "Today is :: " . $now->format('m-d-Y') . "\n";
          echo "End date is :: " . $end->format('m-d-Y') . "\n";
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-21
            • 2011-09-10
            • 2021-08-27
            • 2017-11-06
            • 2021-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多