2011-01-05 86 views
7

是否有一種原生的方式,使用PHP 5.3做"HH:MM:SS" to seconds,而不是對冒號進行拆分,然後將每個段的相關數字加起來計算秒數?如何使用PHP將「HH:MM:SS」字符串轉換爲秒?


例如在Python中,你可以這樣做:

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

+2

等效將'DateInterval :: createFromDateString('00:01:05' ) - >格式(ARG);'但不幸的是,沒有一個參數['format'](HTTP ://de.php.net/manual/en/dateinterval.format.php)將返回總秒數(不同於總天數)。 – Gordon 2011-01-05 15:22:56

+0

@Glavić這個問題比這個更新。 – benjisail 2014-01-13 08:53:07

回答

22

的快捷方式:

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

是的,在代碼行中的快速方式,但速度不快 - strtotime()是一個非常慢的函數。 – Spudley 2011-01-05 14:30:22

+1

@Spudley:實際上它不是,與'list','explode','mktime'組合相比。基準測試告訴我'strtotime'速度更快,但是誰在乎,這是微型優化。 – netcoder 2011-01-05 14:38:16

+1

我希望看到一些基準。 'strtotime()'對字符串做了很多工作來解析它;如果它比mktime()更快運行,我會感到非常驚訝。 (說實話,按照原始問題乘以原則仍然是最快的選擇)。 – Spudley 2011-01-05 14:52:45

7

這應該做的伎倆:

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

希望你不要介意,我編輯了你的答案。如果從'mktime()'中選擇'$ month','$ day'和'$ year'參數,它將使用當前的月份,日期和年份。因此,您需要減去自午夜當前日期以來的秒數,以便從指定的'$ time'中獲取秒數。 – Travesty3 2012-12-28 17:12:00

+0

@ Travesty3 - 沒問題;編輯答案是本網站精神的一部分,所以如果您看到需要編輯的答案,請立即進行編輯。 – Spudley 2012-12-28 20:12:24

+0

@ Travesty3:我認爲1970-1-1的設置日期會更快,因爲它是一個'mktime'調用而不是2個。使用示例:'$ seconds = mktime($ hours,$ mins,$ secs,1 ,1,1970);' – 2014-01-02 01:00:07

2

不幸的是 - 因爲PHP沒有強類型,所以沒有時間類型的概念,因此也沒有辦法在這樣的字符串和「秒」值之間進行轉換。

因此,在實踐中,人們經常將字符串拆分,並像您提到的那樣將每個部分放大。

4

我覺得將是最簡單的方法來使用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

+0

UTC在這裏非常有用,因爲夏令時可能會搞砸了。 – 2017-08-18 04:20:32

相關問題