PHP将日期设置为在特定时间结束

时间:2017-07-07 03:37:29

标签: php date

我目前正在为一家监控日产量数据的制造公司工作,但该公司遵循24小时的生产期限,该期限为6:00 AM,但标准PHP日期/午夜12:00之后的时间变化,是否可以更改PHP日期/时间戳以在早上6点之后更改当前日期?

修改

这是我到目前为止所做的,所以日期必须是今天的日期。

  <?php

  $dt = new DateTime("2017-07-07 00:00:00", 
  new DateTimeZone("Asia/Tokyo"));
  echo "Start: ", $dt->format("Y-m-d H:i:s"), PHP_EOL;
  $dt->add(new DateInterval("PT6H"));
  echo "<br/>";
  echo "End:   ", $dt->format("Y-m-d H:i:s"), PHP_EOL;

  ?>

输出低于

   Start: 2017-07-07 00:00:00
   End: 2017-07-07 06:00:00 

我想要实现的是下面的逻辑,这一天将在早上6:00开始,然后在第二天早上5:59结束。

   Start: 2017-07-07 06:00:00 AM
   End: 2017-07-07 05:59:00 AM

1 个答案:

答案 0 :(得分:1)

不,您无法从根本上改变日历的工作方式。在我看来,你正在寻找的是一对代表一个班次的DateTime。正如你所描述的那样,它非常清楚。我只是使用一个数组来保持它们在一起:

$shift = array();
$format = 'Y-m-d H:i:s';

$shift['start'] = DateTime::createFromFormat($format, date('Y-m-d') . ' 6:00:00', new DateTimeZone("Asia/Tokyo"));
$shift['end'] = clone $shift['start'];
// Now add 23:59:59 to it
$shift['end']->add(DateInterval::createFromDateString('1 Day - 1 seconds'));

echo "Start: ", $shift['start']->format("Y-m-d H:i:s"), PHP_EOL;
echo "End: ", $shift['end']->format("Y-m-d H:i:s"), PHP_EOL;
echo PHP_EOL;

var_dump($shift);

以下是一个示例:https://3v4l.org/m1XgX