【问题标题】:Function that calculates the time difference but takes into account only the hours in PHP计算时间差但仅考虑 PHP 中的小时数的函数
【发布时间】:2014-09-22 03:21:47
【问题描述】:

我有一个日历,用户可以在其中保存事件。每个事件都有一个$start_time 和一个$end_time。时间以HH:mm:ss 格式保存。是否有一个函数可以计算两次之间的差异,但只考虑小时,而不是分钟和秒?例如,如果$start_time = 09.00.00$end_time = 12.00.00difference(start_time, end_time) 应该是3

【问题讨论】:

  • 我已将此标记为重复,因为答案已经在 SO 上。要获得小时数(我假设您希望它是一个整数),您需要做的唯一额外的事情是将上述答案产生的小时数四舍五入到整数。
  • 您是否需要考虑夏令时的转变?
  • 这两次是否总是保证在同一天?不可能有多天的活动吗?

标签: php


【解决方案1】:

您可以通过使用strtotime() 函数将字符串解析为数字格式来计算差异,然后计算时间增量并使用date() 将其解析回字符串表示,如下所示:

$delta = strtotime($end_time) - strtotime($start_time);
$timediff = date('H', $delta);

或者您可以像这样去掉减法前的秒数和分钟数:

$end_time_hrs = date('H', strtotime($end_time));
$start_time_hrs = date('H', strtotime($start_time));

然后是区别:

$delta = strtotime($end_time_hrs) - strtotime($start_time_hrs);
$timediff = date('H', $delta);

【讨论】:

  • date() 函数添加了小修正。希望这能得到您的认可。
  • 当然可以,谢谢!也为这个可耻的错误感到抱歉……
  • 谢谢,这正是我想要的。
【解决方案2】:

DateTime 类有一个比较日期的方法 -

$start = new DateTime('04:13:41');  // accepts the same formats as strtotime
$end = new DateTime('08:31:13');
$diff = $start->diff($end);         // pass 'true' as the second param for absolute
echo $diff->h;                      // 'h' contains the difference in hours

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2020-07-15
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多