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";