2011-05-03 109 views
6

strtotime()如果你能提供一個它能夠理解並可以轉換的日期格式,那麼在PHP中效果很好,但是例如你給它一個英國日期,它就不能給出正確的unix時間戳。接受格式的PHP strtotime()函數?

是否有任何PHP函數,官方或非官方的,可以接受格式變量,告訴日期和時間通過哪種格式的函數?

我來這樣做的最接近的是date_parse_from_format()和您正在尋找strptime混合mktime()

// Example usage of the function I'm after 
//Like the date() function but in reverse 
$timestamp = strtotimeformat("03/05/2011 16:33:00", "d/m/Y H:i:s"); 

回答

21

如果你有PHP 5.3:

$date = DateTime::createFromFormat('d/m/Y H:i:s', '03/05/2011 16:33:00'); 
echo $date->getTimestamp(); 
+0

我正在尋找返回一個unix時間戳而不是另一種字符串格式的日期。 – Brady 2011-05-03 15:45:59

+0

'getTimestamp'返回一個unix時間戳... – meze 2011-05-03 15:48:34

+1

但是' - > getTimestamp()'確實返回一個unix時間戳... – Andrew 2011-05-03 15:50:10

2

,我想。如果需要UNIX時間戳,可以使用它來解析日期,然後使用mktime

function strotimeformat($date, $format) { 
    $d = strptime($date, $format); 
    return mktime($d['tm_hour'], $d['tm_min'], $d['tm_sec'], 
       $d['tm_mon'], $d['tm_mday'], $d['tm_year']); 
} 

這將適用於PHP 5.1及更高版本。

+0

不,我正在尋找的東西,返回一個unix時間戳的值的數組。 Plus strptime沒有在Windows上實現,因此不是理想的解決方案。 – Brady 2011-05-03 15:39:56

+0

好的。我用一個函數更新了我的答案,無論如何給你一個時間戳(儘管如此,仍然不能在Windows上工作)。你當然可以做一些子字符串+ strpos工作(或爆炸+重新排列+ implode)使其成爲美國的日期。 – 2011-05-03 15:46:37

+0

正如在我的問題中提到的,我已經使用'date_parse_from_format()'和'mktime()'的組合方式來顯示你的代碼。 ''date_parse_from_format()'適用於所有系統,但只適用於PHP 5.3> =以前版本可以在早期版本上運行,但不適用於Windows。我會將問題留待幾天,以查看是否有其他答案。 – Brady 2011-05-03 15:52:20

0

strtotime假定它使用/作爲分隔符時,是一個美國的日期/時間。要讓它認爲它是歐元日期/時間,請使用-.作爲日期分隔符。您可以更改/ s到- s或. s用一個簡單的str_replace()

+0

閱讀這個問題......我很清楚strtotime的能力以及如何解決問題。但這不是我要求的...我要求一個函數,它接受任何格式的日期以及一個字符串,該字符串說明該日期的格式是什麼,並返回一個unix時間戳。 – Brady 2011-05-03 15:44:54