PHP - 下一个星期四的约会

时间:2017-11-29 15:08:48

标签: php datetime

代码

$order_dispatch_date = DateTime::createFromFormat('Ymd', $inc['order_dispatch_date']);
$order_dispatch_date = $order_dispatch_date->format('Ymd');

$order_collection = date('Ymd', strtotime('next thursday', $order_dispatch_date));

$order_collection = new DateTime($order_collection); 

echo '['.$order_collection->format('d/m/Y') . ' - ' . $order_dispatch_date . ' - ' . gettype($order_dispatch_date) . ' ] ';

如果输入为:20171128

,我会得到以下输出
[29/08/1970 - 20171128 - string ] 

我的问题是为什么第一个输出显示在1970年8月29日而不是2017年11月20日?

2 个答案:

答案 0 :(得分:1)

停止在对象,字符串和时间戳之间来回切换,特别是当你重新使用相同的变量时。这是不必要的,难以理解。

如果您有一个Ymd格式的字符串,并且您想要在周四继续使用等效字符串,请使用此字符:

$inc['order_dispatch_date'] = '20171128';

$order_dispatch_date = DateTime::createFromFormat('Ymd', $inc['order_dispatch_date'])->modify('next thursday');

echo $order_dispatch_date->format('Ymd');
// 20171130

请参阅https://eval.in/909998

答案 1 :(得分:0)

基本上:

$order_collection = date('Ymd', strtotime('next thursday', strtotime($order_dispatch_date)));

这应该有效:)