在您的活动表单中,您应该向服务器发送一个隐藏的输入信息,其中包含客户端的时区偏移量。你可以通过Javascript的Date.getTimezoneOffset()方法得到它(它给你UTC和用户本地时间之间的分钟偏移量)。
如果您不能这样做,您可以将用户的本地时区保存到数据库中,或者在您的事件表单中提问。
然后,在您的INSERT或UPDATE查询中,您可以使用DATE_ADD('2012-12-13 19:41:00',[用户偏移量] MINUTE)转换时间戳。你也可以做到这一点在PHP中,或客户端提交表单时...
例如在PHP中:
strtotime($event_date);
为您提供了日期的Unix时间戳(所以,单位为秒)。把它转换成另一个时区,根据你在使用JavaScript方法偏离的分钟数,你可以这样做:
$dbTimestamp = strtotime($event_date) + $_POST['offsetInMinutes']/60;
如果你得到抵消这种形式:“+2:00”或“-6:00 +2 '到$匹配[1]
还有一句:
首先,设置你的主人时的参考:”
preg_match('/(.*)\:00/', '+2:00', $match)
将设置,你可以在小时使用正则表达式偏移'到'GMT'在你身上[R配置文件:在http://ellislab.com/codeigniter/user_guide/helpers/date_helper.html
$config['time_reference'] = 'gmt';
选择时区参考或使用timezone_menu()设置一个变量或在下面的代码更新$时区一个DB列:
$time = now();
$timezone = 'UM5';
$daylight_saving = TRUE; // or FALSE
$local_time = unix_to_human(gmt_to_local($time, $timezone, $daylight_saving));
echo $local_time;
OK,我跑您在我的本地机器和RDS上的查询。我的本地机器都返回SYSTEM,RDS返回UTC(这是我想要的)。这至少解释了我的本地机器问题,但是,为什么RDS将它作为0插入到数据库中? – Nag
当您提供无效的时间戳时,插入0。我猜想你正在尝试添加时间戳,哪个数据库认为是未来(由于时区差异),因此它写入0.它始终在时间戳无效时写入0。 – phoops
我实际上并没有在模型中手动传递任何时间戳。我有表设置,以便插入新记录时插入TIMESTAMP到created_on列中。我的生产服务器在PST,但我希望UTC,所以它不能在未来。 – Nag