1

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

16 October 2012
08 October 2012
04 October 2012

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

我有以下实现 -

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

它将所有日期返回为 -

1969-12-31
4

4 回答 4

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']));
于 2012-10-24T17:38:28.683 回答
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'
于 2012-10-24T18:34:16.110 回答
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 上,因为没有在 Windows 中strptime()实现,推荐的方法是date_parse_from_format()按照我上面的建议使用,请参阅从strptime()页面提取的警告:

注意:此功能在 Windows 平台上未实现。

注意:在内部,该函数调用系统 C 库提供的 strptime() 函数。此函数可以在不同的操作系统中表现出明显不同的行为。建议在 PHP 5.3.0 及更高版本上使用不受这些问题影响的 date_parse_from_format()。

因此,如果您的 PHP 版本早于 5.3 并且不能在 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);
于 2012-10-24T18:13:18.980 回答
0

为此使用 PHP 的DateTime——它使事情变得更容易......

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 在近两年前就停止了支持——是时候升级了)

于 2012-10-25T16:07:39.153 回答