在增加天数日期中发行



im 尝试在 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() 注释部分:-

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 日期格式

试试这个,它会为你工作

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

您还可以使用日期间隔:

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

在 ideone 进行测试

阅读 PHP 手册中的注释:

注意: 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'));

演示

您的代码存在几个问题:它获取当前时间(一个数字)并将当前日期格式化为字符串,然后(在将" +60 day'连接到它之后)它再次将其解析为数字,只是为了再次将其格式化为字符串。许多无用且耗电的操作。真正的麻烦是您用于日期的自定义日期格式,并且由于充分的理由而不受 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";

相关内容

  • 没有找到相关文章

最新更新