我尝试在 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
我们将不胜感激任何帮助或建议
答案 0 :(得分:3)
问题原因: - strtotime() 注意 部分: -
m / d / y或d-m-y格式的日期通过查看消除歧义 在各个组件之间的分隔符处:如果分隔符是a 斜线(/),然后是美国m / d / y;而如果 separator是短划线( - )或点(。),然后是欧洲d-m-y格式 假设。但是,如果年份是以两位数格式给出的 分隔符是破折号( - ,日期字符串被解析为y-m-d。
因此,在向php日期添加天数时,m-d-Y
是无法识别的格式。
如下所示: -
<?php
echo "Today is :: ".date("m-d-Y");
echo "\n";
echo $DateEnd = date('m-d-Y', strtotime(date("y-m-d") . '+60 days'));
Outpit: - https://eval.in/894300
同时检查可能的Php date formats
答案 1 :(得分:2)
试试这个,它会对你有用
<?php
echo "Current Date: ".date("m-d-Y");
echo "\n";
echo $contractDateEnd = date('m-d-Y', strtotime(date("d-m-Y") . ' +60 day'));
?>
答案 2 :(得分:2)
您还可以使用dateinterval:
var_dump (date_create()->add(date_interval_create_from_date_string('60 days')));
答案 3 :(得分:1)
阅读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'));
答案 4 :(得分:1)
你的代码有几个问题:它获取当前时间(一个数字)并将当前日期格式化为字符串然后(在它连接'+ 60天'之后)它再次将其解析为数字只是为了格式化它再次作为字符串。很多无用且耗电的操作。真正的麻烦是你用于约会的custom date format,并且PHP不支持它。
使用DateTime
课程来处理日期和时间时间操作。它比旧date()
,strtotime()
和其他日期&amp;时间功能。它可以处理多个时区,代码更短更清晰:
$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";