2011-04-20 100 views
2

我在將格式化日期字符串轉換爲整數時間戳時遇到問題。我使用日期選擇器來輸入一個字段,如DD/MM/YY,我使用strtotime來更改它。strtotime()在格式化日期時拋出false

用法示例

$date_from = (!empty($_POST['datefrom'])) ? (string) $db->sql_escape($_POST['datefrom']) : false; 
$date_to = (!empty($_POST['dateto'])) ? (string) $db->sql_escape($_POST['dateto']) : false; 

$time_from = (!empty($_POST['timefrom'])) ? (string) $db->sql_escape($_POST['timefrom']) : ''; 
$time_to = (!empty($_POST['timeto'])) ? (string) $db->sql_escape($_POST['timeto']) : ''; 

轉儲

var_dump($_POST); 
var_dump($date_from . ' ' . $time_from); 
var_dump($date_to . ' ' . $time_to); 

輸出

array(4) { 
    ["datefrom"]=> 
    string(10) "23/03/2011" 
    ["dateto"]=> 
    string(10) "18/04/2011" 
    ["timefrom"]=> 
    string(5) "01:26" 
    ["timeto"]=> 
    string(5) "04:44" 
} 
string(16) "23/03/2011 01:26" 
string(16) "18/04/2011 04:44" 

現在你可以看到每個瓦里能是不是空的,現在什麼也不返回(除false)使用strtotime當這樣的:

$range_from = strtotime($date_from . ' ' . $time_from); 
$range_to = strtotime($date_to . ' ' . $time_to); 

var_dump($range_from); 
var_dump($range_to); 

輸出

bool(false) 
bool(false) 

現在這就是我堅持以爲它爲什麼不轉換DD/MM/YY HH:MM到一個時間戳,我幾乎無法找到它有什麼問題...

回答

4

請參閱http://php.net/strtotime

在第m

日期/ d/y或DMY格式 是通過查看各種 部件之間的 隔板消除歧義:如果分離器是 斜槓(/),則美國米/ d/y爲假設爲 ;而如果分隔符是 短劃線( - )或點(。),則假定歐洲d-m-y格式爲 。

23/03/2011 m/d/y是無效的,因爲這樣的函數返回false。

+0

這是一個跆拳道,爲什麼不默認系統標準? – alimack 2017-06-06 15:10:46

+0

默認爲系統標準會更成問題,因爲這意味着在一個系統上運行的代碼會在下一個系統中崩潰 – Yexo 2017-06-09 14:06:49