1

我正在使用 php 中的日期,我有点难过

这是我的代码:

$day = 'Thursday';
$i = 0;
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours");
$date = date_format($o_date, 'l');
$full = date_format($o_date, 'd-m-Y');
if($day!=$date) {
    $date = new DateTime($date . " +1 days");
    $i++;
}
$order_day = new DateTime($full . " +".$i." days");$order_day = date_format($order_day, 'D, d M');
return $order_day;

这就是我想要它做的:

1)我有一个字符串格式的一天(例如星期四)

2)我有一个订单日期(例如2012-09-12 20:56:43

我想得到那个日期并将这一天变成一个字符串(例如date_format($o_date, 'l');,这样它将返回Wednesday,然后我想计算订单日期之后的下一个星期四还有多少天,我已经为此构建了一个 if 循环。然后我想要获取原始日期并添加$i累积的天数,然后以日期格式返回日期(例如Thursday, 13 September,但由于某种原因我的代码无法正常工作。有人可以看到我在这里做错了什么吗?

4

2 回答 2

2

而不是一个循环,你为什么不使用数字天并计算:

$day = 'Thursday';
$day_names = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$day_num = array_search($day, $day_names);
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours");
$o_day_num = $o_date->format('w');
$day_diff = ($day_num - $o_day_num) % 7;
if ($day_diff == 0) { $day_diff = 7; }
$order_day = clone $o_date;
$order_day->add(new DateInterval("P".$day_diff."D"));
于 2012-09-13T06:09:12.887 回答
1

所以我实际上更喜欢@Barmar 的想法,但这就是我想出的......您的原始代码中存在许多问题,包括初始日期的格式,以及您每次都在创建一个新对象的事实而不是使用同一个。

如果您选择使用循环,我不确定您是否应该...试试这个:

<?php
$day = 'Thursday';
$i = 0;

// Order Date
$o_date = new DateTime("2012-09-12 20:56:43 +18");
$date = $o_date->format('l');

while($day!==$date) {
  $date = $o_date->add(new DateInterval('P1D'))->format('l');
  $i++;
}
$order_day = $o_date->format('D, d M');
于 2012-09-13T06:19:34.300 回答