使用date()和strtotime()为MySQL准备日期

时间:2012-10-24 17:30:34

标签: php date strtotime

我将日期作为文本字符串格式 -

16 October 2012
08 October 2012
04 October 2012

我想将它们转换为MySQL' date'友好。

我有以下实现 -

$fixed = date("Y-m-d", strtotime($date));

将所有日期返回为 -

1969-12-31

4 个答案:

答案 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已经失去支持了 - 是时候升级了)