我将仅在我的数据库中存储UTC时间,并希望使用PHP将时间戳转换为用户的本地时间。
我的问题是,将用户时区存储在数据库中的最佳方法是什么?
IE:-400,-4,-4:00
话虽如此,我知道如何手动进行数学运算:
$utc_time = strtotime("2011-10-02 23:00:00");
$my_time = $utc_time - 14400;
echo date($timeformat, $mytime);
我的问题是,当用户的时区从数据库中拉出时,我不知道我是要添加还是减去秒数。这就是我遇到的问题,试图找出如何保存时区,以便我可以计算偏移量。
我可以将时区保存为“-14400”,但是使用上面的示例,我不能只使用 - 符号组合两个字符串来为我做数学:
$my_time = $utc_time.$timezone;
那么......如何正确保存时区以完成数学计算?
答案 0 :(得分:4)
一个地方的时区并不总是相同的 - 例如,英国在3月到10月之间是BST(GMT + 1)。使用PHP支持的其中一个时区:
http://php.net/manual/en/timezones.php
如果您继续使用数字,请将它们存储为小时或分钟。将UTC / GMT以西的时区存储为负数。例如,美国东海岸将是-5
(小时)或-300
(分钟) - 假设它落后了5个小时。
然后,将其添加到时间戳 - 负面或正面将处理其余时间。
// for 5 hours behind when stored as hours (-5)
$now = time() + ($offset * 60 * 60);
// for 5 hours behind when stored as minutes (-300)
$now = time() + ($offset * 60);
答案 1 :(得分:2)
时区字符串将优于偏移量或小时数差异 因为某些时区是变化的主题
http://www.php.net/manual/en/class.datetime.php
http://www.php.net/manual/en/class.datetimezone.php
日期/时间数学:
http://www.php.net/manual/en/class.dateinterval.php
http://www.php.net/manual/en/class.dateperiod.php
停止使用php函数,oop类要好得多!
答案 2 :(得分:0)
不是将其存储为字符串,而是将其存储为数字?然后,您只需将该数字添加到时间戳即可。 (对于可以减去的时区,数字可以是负数。)