php - 增加日期日期的问题

时间:2017-11-07 06:55:49

标签: php date strtotime days

我尝试在 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

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

5 个答案:

答案 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')));

Test at ideone

答案 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'));

DEMO

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