【问题标题】:How to convert a "HH:MM:SS" string to seconds with PHP?如何使用 PHP 将“HH:MM:SS”字符串转换为秒?
【发布时间】:2011-06-04 01:21:45
【问题描述】:

有没有一种使用 PHP 5.3 执行 "HH:MM:SS" to seconds 的本地方法,而不是在冒号上进行拆分并将每个部分乘以相关数字来计算秒数?


例如在 Python 中你可以这样做:

string time = "00:01:05";
double seconds = TimeSpan.Parse(time).TotalSeconds;

【问题讨论】:

  • 等价于DateInterval::createFromDateString('00:01:05')->format(arg);,但不幸的是,format 没有返回总秒数的参数(与总天数不同)。
  • @Glavić 这个问题比这个问题新。

标签: php time date-conversion


【解决方案1】:

快捷方式:

echo strtotime('01:00:00') - strtotime('TODAY'); // 3600

【讨论】:

  • 是的,代码行中的快捷方式,但在速度方面并不快—— strtotime() 是一个非常慢的函数。
  • @Spudley:实际上不是,与list,explode,mktime 组合相比。基准测试告诉我strtotime 更快,虽然谁在乎,但它是微优化。
  • 我想看看这方面的一些基准。 strtotime() 对字符串做了很多工作来解析它;如果它可以比 mktime() 运行得更快,我会感到非常惊讶。 (老实说,按照原始问题相乘可能仍然是最快的选择)。
  • echo strtotime('1970-01-01 01:00:00'); // 3600 会比同时调用 strtotime 更快。
  • 只是一个想法——我怀疑时钟在函数调用之间没有被冻结,所以如果你碰巧在两次调用之间到达午夜,你会得到错误的答案——你可以通过硬编码来避免这种情况两个电话的日期,而不是“今天”。
【解决方案2】:

这应该可以解决问题:

list($hours,$mins,$secs) = explode(':',$time);
$seconds = mktime($hours,$mins,$secs) - mktime(0,0,0);

【讨论】:

  • 希望你不介意,我编辑了你的答案。如果您从mktime() 中去掉可选的$month$day$year 参数,它将使用当前月份、日期和年份。因此,您需要在午夜减去当前日期以来的秒数,以仅从指定的$time 中获得秒数。
  • @Travesty3 - 没问题;编辑答案是本网站精神的一部分,因此,如果您看到需要编辑的答案,请继续进行编辑。
  • @Travesty3:我认为将日期设置为 1970-1-1 会更快,因为它是一个 mktime 调用而不是 2 个。使用示例:$seconds = mktime($hours,$mins,$secs,1,1,1970);
【解决方案3】:

我认为最简单的方法是使用strtotime()函数:

$time = '21:30:10';
$seconds = strtotime("1970-01-01 $time UTC");
echo $seconds;

demo


函数date_parse()也可以用于解析日期和时间:

$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

demo

【讨论】:

  • UTC 在这里非常有用,因为夏令时会搞砸。
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多