2009-12-06 315 views
8

確實有人知道從日期獲取包含日期格式的字符串的方式嗎?從php日期獲取日期格式如「Y-m-d H:i:s」

<?php 
    $date = date ("2009-10-16 21:30:45"); 

    // smething like this? 
    print date_format ($date); 
?> 

我問這個,因爲我想優化這個功能,我寫的,通常獲取日期與服務器不同的時區,而不會做特別的事情

<?php 
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) { 
    if ($date == null) $date = date ($format); 
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get(); 
    if ($format == null) $format = "Y-m-d H:i:s"; 
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it 
    // if ($format == null) $format = date_format ($date); 

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone)); 
    $date_time->setTimeZone (new DateTimeZone ($timezone)); 
    return $date_time->format ($format); 
} 

print get_timezone_offset ("Europe/Rome"); 
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s")); 
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s"); 
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York"); 
?> 

我希望避免正則表達式的性能原因,但我不知道這是否可能

回答

4

據我所知,沒有保證的反向工作方式。最好的辦法可能是嘗試將正則表達式與預期的衆所周知的格式相匹配(例如\d{2,4}[-/]\d{2}[-/]\d{2}用於「Y-m-d」),但我想不到使用正則表達式進行匹配的簡單方法。你還必須檢查解析後的格式是否有意義,而且你不能對諸如2009年3月2日這樣的模糊日期做過多處理,這可能表示爲09/03/02,2009-03-02,02/03/0903/02/09,或者甚至09/02/03

+1

唯一一個真正理解OP的問題的人! – 2015-12-14 20:42:58

9

您可以將字符串日期轉換爲時間戳與strtotime和做任何你想要的時間戳。 ;)

<?php 
$date = "2009-10-16 21:30:45"; 
$ts = strtotime($date); 
echo date('Y-m-d', $ts); 
?> 
+1

這看起來對我來說,他想從一個日期的格式向後工作。 (即從「2009-10-16」到「Y-m-d」) – DMI 2009-12-06 12:51:18

+0

我的錯誤 - 我複製的代碼太快 - 現在沒關係。 – hsz 2009-12-06 12:53:21

3

PHP date()函數將時間戳格式化爲更易讀的日期和時間。試試這個代碼,你的項目,

<?php 
    $date=date_create('2014-10-20'); 
    date_time_set($date,12,20,55); 
    echo date_format($date,'Y-m-d H:i:s'); 
    ?> 
3

我知道它的晚,但它是最好的事:

$date = date("Y-m-d");