0

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

例如“格林威治标准时间 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;

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

编辑 我刚刚意识到第二块代码可能由于格林威治标准时间而出错,因为它似乎不是这个函数的可用格式。

编辑 经过进一步调查,我认为存储数据的最佳方法是将所有日期存储为DATETIMEin具有相同时区(gmt)的 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;
4

5 回答 5

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 部分。

于 2013-05-05T11:33:14.637 回答
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中设置会话时区:

于 2013-05-05T01:18:57.107 回答
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

于 2013-05-05T01:29:03.457 回答
0
$date = date_create_from_format('d M Y H:i A e', '02 May 2013 12:08 AM GMT');
echo $date;

由于不同的原因,此代码将始终产生错误消息。

如果 PHP 版本 < 5.3 则代码将失败,因为date_create_from_format()不存在。

如果 PHP 版本 >= 5.3,那么第二行将失败,因为$date它是一个实例,DateTime并且该类没有__toString()方法。改为使用DateTime::format()

于 2013-05-05T10:51:04.413 回答
-1

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

$timestamp = strtotime($string);

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

于 2013-05-05T01:04:04.353 回答