我需要能够将字符串(请参见下面的示例)转换为可添加到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;
答案 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,则第二行将失败,因为$date
是DateTime
的实例,并且该类没有__toString()
方法。请改用DateTime::format()
。
答案 4 :(得分:-1)
您可以使用strtotime()
将时间的文本表示(例如您的示例)转换为Unix时间戳:
$timestamp = strtotime($string);
然后,您可以将此值存储在MySQL的TIMESTAMP
字段类型中。