如何在mysql中存储用户时区?

时间:2011-10-06 20:00:13

标签: php mysql date time

  

可能重复:
  Datatype/structure to store timezones in MySQL

我将仅在我的数据库中存储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;

那么......如何正确保存时区以完成数学计算?

3 个答案:

答案 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)

不是将其存储为字符串,而是将其存储为数字?然后,您只需将该数字添加到时间戳即可。 (对于可以减去的时区,数字可以是负数。)