将字符串转换为MySQL日期

时间:2013-05-05 00:46:08

标签: php mysql date

我需要能够将字符串(请参见下面的示例)转换为可添加到MySQL的格式。我可以将它添加为var car但我需要能够根据这些日期范围运行查询。

e.g。 '2013年5月2日格林威治标准时间上午12:08'

有关实现这一目标的最佳方法的任何建议吗?

修改 目前正在尝试以下方法:

$date = date_create_from_format('d M Y H:i A e', '02 May 2013 12:08 AM GMT');
echo $date;

但在尝试回显日期时收到服务器错误。

我也尝试过以下方法来区分日期和时区,并尝试单独处理:

$myvalue = '02 May 2013 12:08 AM GMT';
$arr = explode(' ',trim($myvalue));
$timezone = new DateTimeZone($arr[5]);
$arr[count($arr)-1]='';
$time=implode(' ',$arr);
$date = date_create_from_format('d M Y h:i A', $time, $timezone);
echo $date;

但我再次收到服务器错误。

修改 我刚刚意识到第二块代码可能由于GMT而出错,因为它似乎不是这个函数的可用格式。

修改 经过进一步调查后,我认为存储数据的最佳方法是将所有日期存储为具有相同时区(gmt)的DATETIMEin MySQL,并同时存储它们的实际时区,并在运行查询时使用时区如果需要的话。

$myvalue = '02 May 2013 12:08 AM GMT';
$arr = explode(' ',trim($myvalue));
$timezone = new DateTimeZone($arr[5]);
$arr[count($arr)-1]='';
$time=implode(' ',$arr);
$timestamp = strtotime($time);
$date = date("Y-m-d H:i:s", $timestamp);
echo $date;

5 个答案:

答案 0 :(得分:1)

为什么你不这样做呢?

function convertToMysqlTime($string){
    $seconds = strtotime($string);
    if (!$seconds) return false;
    return date("Y-m-d H:i:s", $seconds);
}

echo convertToMysqlTime('02 May 2013 12:08 AM GMT');

它也是GMT的一部分。

答案 1 :(得分:0)

使用DateTime类createFromFormat函数。如果您的PHP版本<= 5.3。这是文档:http://www.php.net/manual/en/datetime.createfromformat.php

修改:

$date = DateTime::createFromFormat('d M Y H:i A e','02 May 2013 12:08 AM GMT');
echo $date->getTimeZone()->getName(); //return 'UTC'
echo $date->format('Y-m-d H:i:s'); // return 2013-05-02 00:08

在mysql中设置会话timezone

答案 2 :(得分:0)

我希望你想转换从javascript“Date()”函数获得的日期。 在javascript部分考虑这个功能:

function ISODateString(d) // to get date in format that MySQL accepts
{
  function pad(n){return n<10 ? '0'+n : n}
  return d.getUTCFullYear()+'-'
      + pad(d.getUTCMonth()+1)+'-'
      + pad(d.getUTCDate()) +' '
      + pad(d.getUTCHours())+':'
      + pad(d.getUTCMinutes())+':'
      + pad(d.getUTCSeconds())
}

使用后:

var d=ISODateString(new Date())

现在发送它使用post方法或使用url编码的GET到utf-8

答案 3 :(得分:0)

$date = date_create_from_format('d M Y H:i A e', '02 May 2013 12:08 AM GMT');
echo $date;

此代码将始终产生错误消息,原因各不相同。

如果PHP版本是&lt; 5.3然后代码将失败,因为date_create_from_format()不存在。

如果PHP版本是&gt; = 5.3,则第二行将失败,因为$dateDateTime的实例,并且该类没有__toString()方法。请改用DateTime::format()

答案 4 :(得分:-1)

您可以使用strtotime()将时间的文本表示(例如您的示例)转换为Unix时间戳:

$timestamp = strtotime($string);

然后,您可以将此值存储在MySQL的TIMESTAMP字段类型中。