2009-09-07 179 views
2

我試圖使用的strtotime轉換以下日期:的strtotime歐洲日期格式

07/09/2009 17時01分27秒

這是九月的7日歐洲/倫敦時區格式

該函數反轉月份和日期,是否有任何解決方法? 感謝

+0

只是交換日期和月份的值。 – Gumbo 2009-09-07 15:17:42

+0

我沒有使用每個值一個變量,否則我會這樣做 – Roch 2009-09-23 09:58:20

回答

1

嘗試:

strtotime(07/09/2009 17:01:27 GMT); 

或者先試試這個可能:

date_default_timezone_set('Europe/London'); 

我想最好的答案是沒有的strtotime使用,你永遠不可能100%,其精度

+0

「...不使用strtotime,因爲您的精度永遠無法達到100%」 對於任何未被理解和使用的函數正常。 strtotime()是一個非常有用和強大的功能。一種解決方案是始終將日期格式(用於計算目的)格式化爲「Y-m-d」。 – GZipp 2009-09-07 16:39:08

5

如果您不在Windows上,您可以改爲使用strptime,並明確設置格式。正如OIS指出的,strptime在Windows上不可用。

要將拆分年/月/日等值轉換爲unix時間戳,您可以將它們傳遞到mktime。有點煩躁,但它的工作原理。

您可能想要這樣做的一個原因是使用date以不同的格式打印它。

從strptime php.net頁:

實施例#1 strptime()的例子

<?php 
    $format = '%d/%m/%Y %H:%M:%S'; 
    $strf = strftime($format); 

    echo "$strf\n"; 

    print_r(strptime($strf, $format)); 
?> 

上例將輸出 東西類似於:

3月10日/ 2004 15:54:19

Array 
(
    [tm_sec] => 19 
    [tm_min] => 54 
    [tm_hour] => 15 
    [tm_mday] => 3 
    [tm_mon] => 9 
    [tm_year] => 104 
    [tm_wday] => 0 
    [tm_yday] => 276 
    [unparsed] => 
) 
+1

注意:該功能在Windows平臺上未實現。 – OIS 2009-09-07 15:29:12

1

這是一個快速修復應該工作。另一種方法是使用命名匹配的正則表達式。

function eurototime($string) 
{ 
    static $sorted = array(
     'tm_hour' => null, 
     'tm_min' => null, 
     'tm_sec' => null, 
     'tm_mon' => null, 
     'tm_mday' => null, 
     'tm_year' => null, 
    ); 
    static $unsorted = array(
     'tm_mday', 
     'tm_mon', 
     'tm_year', 
     'tm_hour', 
     'tm_min', 
     'tm_sec', 

    ); 
    static $format = '%d/%d/%d %d:%d:%d'; 
    $parsed = sscanf($string, $format); 
    $data = array_combine($unsorted, $parsed); 
    $sortedData = array_merge($sorted, $data); 
    $int = call_user_func_array('mktime', $sortedData); 
    return $int; 
} 

date_default_timezone_set('Europe/London'); 
echo eurototime(date('d/m/Y H:i:s')), "\n", time(),"\n"; 
17

變化/-,好像PHP得到/爲美國的格式,並-歐洲。你可以在這裏看到:

$date = "06/10/2011 14:28"; // 6 october 2011 2:28 pm 
$otherDate = "06-10-2011 14:28"; // 6 october 2011 2:28 pm 

echo $stamp = strtotime($date) . "<br />"; // outputs 1307708880 
echo $otherStamp = strtotime($otherDate) . "<br />"; // outputs 1317904080 

echo date("d-m", $stamp); // outputs 10-06 
echo date("d-m", $otherStamp); // outputs 06-10 

http://www.php.net/manual/es/function.strtotime.php#106043

+2

這是正確的答案。 – conor 2012-12-01 18:04:49

+0

其他答案混合了月份和日期,這一個確實是正確的。 – Tumtum 2015-07-07 14:19:56

5

DateTime可以很容易地處理這個問題:

$datetime = new DateTime('07/09/2009 17:01:27', new DateTimeZone('Europe/London')); 
echo $datetime->format('d/m/Y H:i:s'); 

See it in action

相關問題