2011-04-20 95 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