【问题标题】:php add mins to datephp 添加分钟到日期
【发布时间】:2018-05-28 10:27:30
【问题描述】:
$orderDate = date('d/m/Y H:i:s', strtotime($result[$x]['date_modified']) );
echo "<br>".$orderDate;
$endTime =date('d/m/Y H:i:s',strtotime('+10 minutes', $orderDate));
echo "<br>".date('d/m/Y H:i:s', $endTime);

打印为

28/05/2018 09:27:45 - 这是正确的

注意:在 C:\xampp5.5\htdocs\php\index.php 在第 4166 行

注意:在 C:\xampp5.5\htdocs\php\index.php 在第 4167 行

01/01/1970 12:00:01 - 为什么这不起作用?

【问题讨论】:

  • 为什么您在打印时再次格式化$endTime?。它已经格式化了
  • "on line 4167" 你的脚本那么长吗?
  • 是的,我没有拆散任何东西
  • 旁注:为了处理日期修改,我建议使用 carbon 库,因为它提供了很多辅助方法:

标签: php time strtotime


【解决方案1】:

strtotime 函数不适用于一些日期格式,d/m/Y 是其中一种格式。为了正确处理日期和时间,一种推荐的格式是 MySQL 日期格式,即YYYY-mm-dd,并对其进行进一步处理。

进一步阅读:The strtotime documentation reads:

m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

【讨论】:

    【解决方案2】:
    $orderDateTimestamp = strtotime($result[$x]['date_modified']);
    $endDateTimeStamp = strtotime('+10 minutes', $orderDateTimestamp);
    $orderDate = date('d/m/Y H:i:s', $orderDateTimestamp);
    $endDate = date('d/m/Y H:i:s', $endDateTimeStamp);
    echo $orderDate.'<br>'.$endDate;
    

    strtotime 期望第二个参数是一个整数(时间戳)。此外,它接受的不是所有格式的字符串源,例如d/m/Y(还要检查$result[$x]['date_modified']的格式,如果它来自MySql结果集你不应该有问题,因为它是Y-m-d H:i:s)。 所以用这个解决方案纠正它,它应该可以工作

    【讨论】:

    • 感谢 Jack Skeletron 和其他所有人
    【解决方案3】:

    使用DateTime::createFromFormat 接受所有类型的日期和时间格式

    $dt = DateTime::createFromFormat('d/m/Y h:i:s', '28/05/2018 09:27:45');
    $dt->add(new DateInterval('PT10M'));
    echo $dt->format('d/m/Y h:i:s');
    

    Live Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-31
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2020-11-22
      • 2017-06-21
      相关资源
      最近更新 更多