是否有一種原生的方式,使用PHP 5.3做"HH:MM:SS" to seconds
,而不是對冒號進行拆分,然後將每個段的相關數字加起來計算秒數?如何使用PHP將「HH:MM:SS」字符串轉換爲秒?
例如在Python中,你可以這樣做:
string time = "00:01:05";
double seconds = TimeSpan.Parse(time).TotalSeconds;
是否有一種原生的方式,使用PHP 5.3做"HH:MM:SS" to seconds
,而不是對冒號進行拆分,然後將每個段的相關數字加起來計算秒數?如何使用PHP將「HH:MM:SS」字符串轉換爲秒?
例如在Python中,你可以這樣做:
string time = "00:01:05";
double seconds = TimeSpan.Parse(time).TotalSeconds;
的快捷方式:
echo strtotime('01:00:00') - strtotime('TODAY'); // 3600
是的,在代碼行中的快速方式,但速度不快 - strtotime()是一個非常慢的函數。 – Spudley 2011-01-05 14:30:22
@Spudley:實際上它不是,與'list','explode','mktime'組合相比。基準測試告訴我'strtotime'速度更快,但是誰在乎,這是微型優化。 – netcoder 2011-01-05 14:38:16
我希望看到一些基準。 'strtotime()'對字符串做了很多工作來解析它;如果它比mktime()更快運行,我會感到非常驚訝。 (說實話,按照原始問題乘以原則仍然是最快的選擇)。 – Spudley 2011-01-05 14:52:45
這應該做的伎倆:
list($hours,$mins,$secs) = explode(':',$time);
$seconds = mktime($hours,$mins,$secs) - mktime(0,0,0);
希望你不要介意,我編輯了你的答案。如果從'mktime()'中選擇'$ month','$ day'和'$ year'參數,它將使用當前的月份,日期和年份。因此,您需要減去自午夜當前日期以來的秒數,以便從指定的'$ time'中獲取秒數。 – Travesty3 2012-12-28 17:12:00
@ Travesty3 - 沒問題;編輯答案是本網站精神的一部分,所以如果您看到需要編輯的答案,請立即進行編輯。 – Spudley 2012-12-28 20:12:24
@ Travesty3:我認爲1970-1-1的設置日期會更快,因爲它是一個'mktime'調用而不是2個。使用示例:'$ seconds = mktime($ hours,$ mins,$ secs,1 ,1,1970);' – 2014-01-02 01:00:07
不幸的是 - 因爲PHP沒有強類型,所以沒有時間類型的概念,因此也沒有辦法在這樣的字符串和「秒」值之間進行轉換。
因此,在實踐中,人們經常將字符串拆分,並像您提到的那樣將每個部分放大。
我覺得將是最簡單的方法來使用strtotime()
功能:
$time = '21:30:10';
$seconds = strtotime("1970-01-01 $time UTC");
echo $seconds;
功能date_parse()
也可以用來解析日期和時間:
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
UTC在這裏非常有用,因爲夏令時可能會搞砸了。 – 2017-08-18 04:20:32
等效將'DateInterval :: createFromDateString('00:01:05' ) - >格式(ARG);'但不幸的是,沒有一個參數['format'](HTTP ://de.php.net/manual/en/dateinterval.format.php)將返回總秒數(不同於總天數)。 – Gordon 2011-01-05 15:22:56
@Glavić這個問題比這個更新。 – benjisail 2014-01-13 08:53:07