【问题标题】:Converting hours to timestamps将小时转换为时间戳
【发布时间】:2018-05-18 14:25:58
【问题描述】:

要将日期转换为时间戳,我通常这样做 - strtotime ("2018-05-17 05:04:34) 但现在,我只想将小时(不带日期)例如 02:00:00 转换为时间戳. 我该怎么做?

为什么我需要它来比较某个时间是否大于指定的小时。这就是我正在做的事情:

$reported = strtotime("2018-05-17 05:04:34");
$respons = strtotime("2018-05-17 17:04:34);
$response_time = $respons - $reported;

我想检查 $response_time 是否大于 1 小时。

【问题讨论】:

  • 他们是同一天吗?
  • 使用 substr 并删除字符串的前 11 个字符。
  • @Andreas 问题是当只有时间组件没有日期组件时,如何进行计算。
  • 是一样的。一小时是3600秒

标签: php


【解决方案1】:

DateTime::diff,它可能满足你的需要

https://secure.php.net/manual/de/datetime.diff.php

在你的情况下应该是

$datetime1 = new DateTime("2018-05-17 05:04:34");
$datetime2 = new DateTime("2018-05-17 17:04:34);
$interval = $datetime1->diff($datetime2);
echo $interval->format('H hours');

【讨论】:

    【解决方案2】:

    Strtotime 在解析没有日期的时间时没有问题。
    无需伪造一个会回来并用夏令时咬你的日期。
    我还添加了一个检查以查看开始/结束是否“反转”。

    $start= "2018-05-17 05:04:34";
    $end = "2018-05-17 17:04:34";
    
    //Note that it's intentionally reversed
    $diff = strtotime(substr($start,11))-strtotime(substr($end,11));
    
    //If the calculation was reversed add one day in seconds
    if($diff <0) $diff += 86400;
    
    If($diff >3600){
        Echo "more than one hour";
    }Else{
        Echo "less than one hour";
    }
    

    https://3v4l.org/g1jZH

    【讨论】:

      【解决方案3】:

      我相信只有我正确理解了您的问题。

      我只想转换几个小时(没有日期),例如02:00:00 到时间戳。

      这里没有日期组件。

      好的,我假设它们是同一日期。如果是这种情况,只需在两者前面附加一个任意日期即可使strtotime() 函数工作:

      $start = "05:04:34";
      $end = "17:04:34";
      $reported = strtotime("2018-05-17 " . $start);
      $respons = strtotime("2018-05-17 " . $end);
      $response_time = $respons - $reported;
      if ($response_time > 3600)
        echo "More than hour!";
      else
        echo "Less than hour!";
      

      注意:如果开始时间是 17:00 并且结束时间是 08:00 - 这发生在第二天,则此方法不起作用。您必须确保开始时间大于结束时间,然后您必须在结束时间上再增加一天。

      【讨论】:

      • 你提到我的 cmets 中不允许使用日期部分,但你也这样做
      • 您正在附加任意日期
      • @delboy1978uk 所以?只有这样strtotime() 函数才能正常工作?如果没有日期组件,它将无法工作。 OP 只需要一个代码,它必须比较两次没有日期组件
      • 那么为什么要批评我的解决方案呢?它更优雅
      • @delboy1978uk 不,我不是在批评你的。您已经完全偏离了 OP 想要的。 OP有两次。开始和结束(我相信),他们想要有所作为,但其中没有日期。
      【解决方案4】:

      我喜欢 DateTime 类,试试这个:

      <?php
      
      $reported = new DateTime('2018-05-17 05:04:34');
      $reported->modify('+2 hours');
      $now = new DateTime();
      
      echo $now < $reported ? 'less than 2 hours' : 'more than 2 hours';
      

      看这里https://3v4l.org/T7BEL

      在此处查看 DateTime 类文档http://php.net/manual/en/class.datetime.php

      【讨论】:

      • 问题是当只有时间分量没有日期分量时,如何计算。
      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多