我使用if语句的简写符号来格式化字段。如果该字段是空字符串,我将其保留为空字符串,如果没有,那么我尝试将其格式化为正确的日期时间格式,以便可以将其插入到mysql数据库中。这是我的PHP代码
$date = ($date == '') ? date("Y-m-d", strtotime($date)) : $date;
由于某种原因,当$ date字符串不为空时,它将以格式'm / d / Y'格式返回:例如:04/01/2010
当我将代码拉出速记时
$date = date("Y-m-d", strtotime($date));
print($date);
它的格式正确,如'Y-m-d'或2010-04-01。有谁知道为什么会这样?感谢
答案 0 :(得分:1)
我在这里试图完成你所做的一切,但你可能会有更多的运气:
$date = ($ts = strtotime($date)) ? date("Y-m-d", $ts) : '';
这将尝试解析任何传入的日期字符串,如果日期不可解析,则会失败为空字符串。
请注意,检查strtotime解析日期的能力非常重要,因为如果$ date不包含可解析日期,则date(“Ymd”,strtotime($ date))将返回1970年左右的某个日期。
e.g:
$ php -r 'var_dump(date("Y-m-d", strtotime("thisisnotadate")));'
string(10) "1970-01-01"
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/1901")));'
string(10) "1970-01-01"
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/2048")));'
string(10) "1970-01-01"
$
strtotime只能处理符合32位时间戳的日期,这会将其限制在1970 - 2038年。此外,某些日期格式可能不明确。
答案 1 :(得分:1)
您混淆了三元运算符的参数,只需切换它们,或者更改等于运算符以检查不等式:
$date = ($date !== '') ? date("Y-m-d", strtotime($date)) : $date;
答案 2 :(得分:0)
在您描述的情况下,$date
必须已使用m/d/Y
表示法在脚本的其他位置设置。在这种情况下,三元运算符使$date
保持不变。
当您摆脱速记时,m/d/Y
字符串被strtotime
强制转换为时间戳,然后被Y-m-d
强制转换为date()
字符串。< / p>
答案 3 :(得分:0)
现在,您的陈述是:
If $date is an empty string, pass that empty string as a timestamp to the string to time function. Pass that to the date function. Otherwise return the contents of $date.
也许你打算:
$date = ($date == '') ? date("Y-m-d") : $date;
答案 4 :(得分:0)
在我看来,你正在做一些你不需要的事情(使用三元语法)。来自您的一条评论My intention is that if it is an empty string then keep it an empty string, if not then formate it using strtotime then the date function. I would need the strtotime in there to properly format it for mysql
if($date != '') // leave it alone if it is an empty string
{
$date = date("Y-m-d", strtotime($date));
}
(重要提示 - 多年来我没有触及PHP,所以语法可能会关闭,但原理是相同的)