2016-04-22 40 views
6

我目前正在研究一個Wordpress項目,在那裏我應該得到一些自定義的發佈元數據,將其轉換爲DateTime實例,並對其進行數學運算。什麼是通過DateTime :: createFromFormat創建'2016.04.30 PM 7:30'的PHP DateTime實例的正確格式?

當我echo的get_post_meta,它看起來如下。

2016年4月30日下午7:30

格式我用得到一個DateTime實例如下。

Y.m.d甲克:ⅰ

DateTime::createFromFormat返回值是false

// 2016.04.30 PM 7:30 
$start_at = DateTime::createFromFormat('Y.m.d A g:i', get_post_meta(get_the_ID(), 'as_date', true)); 
if ($start_at === false) { 
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true); 
} else { 
    echo $start_at->getTimestamp(); 
} 

結果是False format: 2016.04.30 PM 7:30

我在這裏錯過了什麼?我認爲這一定是微不足道的,但我無法通過。

回答

3

測試,我發現,在格式問題字符是'一個'。所以我戳了一下,發現bug in PHP(這顯然不是一個錯誤!)

通過source code,它看起來像它不會解析AM和PM,直到一小時後已經被解析。

可能是你最好的選擇將是一個快速穿過正則表達式的AM/PM移動到結束:

$thedate = get_post_meta(get_the_ID(), 'as_date', true); 
$thedate = preg_replace("/([0-9.]+) ([ap]m) ([0-9:]+)/i", "$1 $3 $2", $thedate); 
$start_at = DateTime::createFromFormat('Y.m.d g:i A', $thedate); 
1

改變日期格式,並嘗試createFromFormat

$non_standard_format = '2016.04.30 PM 7:30'; 
$non_standard_format = str_replace('.','-',$non_standard_format); 
$date_components = explode(" ",$non_standard_format); 
$standard_format = $date_components[0]." ".$date_components[2]." ".$date_components[1]; 

那就試試這個傳遞給DateTime::createFromFormat

$start_at = DateTime::createFromFormat('Y-m-d g:i A', $standard_format); 
if ($start_at === false) { 
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true); 
} else { 
    echo $start_at->getTimestamp(); 
} 

Supported date formats in PHP

+0

不要忘記改變從''年月日A G格式字符串:我''到''Ymd g:我A''在你的例子中。 –

相關問題