我将日期作为文本字符串格式 -
16 October 2012
08 October 2012
04 October 2012
我想将它们转换为MySQL' date'友好。
我有以下实现 -
$fixed = date("Y-m-d", strtotime($date));
将所有日期返回为 -
1969-12-31
答案 0 :(得分:2)
strtotime
有一系列可接受的格式,您使用的格式不是一个。
您需要strptime()
$d = strptime($date, '%d %B %Y');
$fixed = date("Y-m-d", mktime(0,0,0,$d['tm_mon'],$d['tm_mday'],$d['tm_year']));
答案 1 :(得分:1)
除了我的其他答案,我使用PHP日期函数来获取结果,如果你想避免它们并为你的特定情况使用更快的方法,你可以使用以下自定义函数:
function mysql_date($d) {
$m = array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');
$ex = explode(' ',$d);
$mon = array_search( strtolower( substr($ex[1],0,3) ) ,$m) + 1;
return $ex[2] . '-' . $mon . '-' . $ex[0];
}
$date='16 October 2012';
echo mysql_date($date); //echoes '2012-10-16'
答案 2 :(得分:0)
这应该适用于PHP 5.3及以上版本:
$date='16 October 2012';
$a = date_parse_from_format($date, '%d %F %Y');
$atime = mktime(0, 0, 0, $a['month'], $a['day'], $a['year']);
echo date("Y-m-d", $atime);
如果您的PHP版本较旧,请注意您的PHP不在Windows上,因为strptime()
未在Windows中实现,推荐的方式是使用date_parse_from_format()
,如上所述,请参阅从strptime()页面提取的警告:
注意:此功能未在Windows平台上实现。
注意:在内部,此函数调用提供的strptime()函数 由系统的C库。这个功能可以显着地表现出来 不同操作系统的不同行为。指某东西的用途 date_parse_from_format(),没有遇到这些问题,是 建议在PHP 5.3.0及更高版本上使用。
因此,如果你有一个早于5.3的PHP并且它不能在Windows上运行,那么你可以使用这个代码:
$date='16 October 2012';
$a = strptime($date, '%d %B %Y');
$atime = mktime(0, 0, 0, $a['tm_mon'], $a['tm_mday'], $a['tm_year']);
echo date("Y-m-d", $atime);
答案 3 :(得分:0)
使用PHP DateTime
class来实现这一点 - 它使所以更容易......
function sqlDateFromLongDate($input) {
$dateObj = DateTime::createFromFormat($input,'d F Y');
return $dateObj->format('Y-m-d');
}
print sqlDateFromLongDate('08 October 2012');
希望有所帮助。
**注意:此解决方案需要PHP 5.3及更高版本。 (但另请注意,这是现在支持的最低版本:如果您使用的是较低版本,请注意,大约两年前,php 5.2已经失去支持了 - 是时候升级了)