2011-02-17 23 views
1

我使用strtotime獲得一些相對時間戳使用字符串描述的時間量向前或向後移動,即「+1小時15分鐘」,「-2小時,45分鐘」。strtotime返回意外的結果,相對時間戳

這完美的作品:

$ds = strtotime('02/20/11 09:30:00 -1 hour'); 

但是,如果是 「-1小時15分鐘」,strtotime似乎是減去小時,然後加入15分鐘。

我用逗號試了一下:http://codepad.org/3dq7c2GM

我來到這裏,看到了previous question about this,並嘗試了沒有逗號:http://codepad.org/G8gm8E84

仍然沒有運氣。我試過使用相關參數:http://codepad.org/nwZ9ZqOv沒有。

我發現我自己的解決方案,這是非常不直觀的,我不確定如果我失去了一些東西,或者甚至不正確地接近這個。工作版本最終被:

$ds = strtotime('02/20/11 09:30:00 -1 hour -15 minutes'); 

http://codepad.org/O89S3mCj

我失去了一些東西在這裏?在docs中沒有提及這種行爲。另外,有沒有更好的方法來使用基於字符串的持續時間來獲取這樣的相對時間戳?

編輯

編輯追加這些字符串的來源 - 他們是從通過AJAX用戶界面的到來。有一些窗體控件具有+/-按鈕,以15分鐘的間隔在顯示區域中增加/減少持續時間。當它們發生變化時,AJAX請求會將這些值觸發到服務器,並通過strtotime轉換爲曆元時間戳,然後存儲在數據庫中。

+0

夏時制開始的日期? – 2011-02-17 15:56:21

+0

2001年,DST從3月13日星期日開始,到11月6日星期日結束。我很難看出DST會如何影響它 - 這很清楚發生了什麼。我想知道爲什麼,如果可能的話,以及是否有更好的方法。 – 2011-02-17 16:03:55

回答

2

我之前沒有觀察到這種行爲,但也許是因爲我總是將間隔轉換爲分鐘。即,

$ds = strtotime('02/20/11 09:30:00 -75 minutes'); 
+0

我曾經遇到過這種情況,但界面以'小時,分鐘'的格式給出了值,並且在將它用於時間之前不必非要使用該值。也就是說,我已經用hypen替換逗號以獲得​​期望的輸出... +1,但我寧願不走這條路線。 – 2011-02-17 15:54:42

0

你的時間來自哪裏?你在哪裏使用它?如果涉及到一些SQL,您可能可以使用MySQL Date操作。

+0

這應該是對問題的評論,而不是回答。 (因爲它不是答案。):-) – 2011-02-17 15:55:08

0

它很有意義 - 它畢竟是一個翻譯。

<?php 
$ds = strtotime('02/20/11 09:30:00 -1 hour, 15 minutes'); 
echo $ds."\n"; 
echo date('m/d/Y h:i:s a', $ds)."\n"; 
?> 

一個1每小時一次suctracts,並增加了15分鐘的時間,因此,如果15分鐘內變成負(像你一樣,因爲你希望它會做)

我永遠不會使用strtotime親自 - 我更喜歡與自從時代以來的秒工作:-)