【问题标题】:Small issue PHP date / strtotime function小问题 PHP date/strtotime 函数
【发布时间】:2017-05-04 12:51:23
【问题描述】:

我的代码有一个小问题。我正在尝试计算 2 次之间的差异。

这是我的代码:

$dif = strtotime($tt['endtime']) - strtotime($tt['starttime']);
echo date("H:i", $dif);

$tt['endtime'] = 13:00 和 $tt['starttime'] 是 12:00 所以输出应该是 01:00,但输出是 02:00。

我做错了什么?

提前致谢!

【问题讨论】:

  • date 需要一个 unix 时间戳,而不是 2 之间的差异。
  • 您正在尝试将日期差异转换为日期。当你有 5 月 4 日 11:00 和 5 月 5 日 11:00 时会发生什么?
  • 您希望如何显示格式,因为您当前所做的正在传递错误的差异,您需要手动转换这些格式
  • “我做错了什么?”——你把纯粹的时间当作日期来使用。你的差异的结果是3600 - 所以这是从 unix 时代开始的 3,600 秒,所以 1.1.1970 0:00:00。而且由于您再次将其格式化为日期,因此时区开始发挥作用。如果时区有夏令时/冬令时,那么您很可能在 1.1.1970 上有冬令时。所以相差一小时。
  • 如果您坚持以该格式回显,您可以将您的$dif 添加到00:00

标签: php date strtotime


【解决方案1】:

这是因为date() 的输出被您的服务器所在的时区“改变”了。您可以查看this question 了解更多信息。

相反,您可以使用gmdate()(时区没有问题):

$endtime = "13:00";
$starttime = "12:00";
$difference = abs(strtotime($endtime) - strtotime($starttime));
echo gmdate("H:i", $difference);
// 01:00

请参阅https://3v4l.org/BkRFM 了解输出。

【讨论】:

    【解决方案2】:

    使用此代码进行时间减法

    $tt['endtime']   = '13:00:00';
    $tt['starttime'] = '12:00:00';
    
    $dif = strtotime($tt['endtime']) - strtotime($tt['starttime']); //here you can subtraction occurs
    
    echo gmdate("H:i", $dif);  // In this step you got the correct output 01:00
    

    【讨论】:

      【解决方案3】:

      使用 gmdate()

      $dif = strtotime('13:00')-strtotime('12:00');
      echo gmdate("H:i", $dif);
      

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多