我正在创建一个用户可以选择时区的UI。我的后端是PHP,我知道你可以通过几种方式做到这一点,但我对所有这些方面都有疑问,哪种方式最好:
http://ca2.php.net/date_default_timezone_set
//where America/Los_Angeles will be changed based on user
date_default_timezone_set('America/Los_Angeles');
这是否会改变用户的服务器时区或正在导出的内容?这有什么性能问题吗?
如果是这样的功能怎么办??
<击> date_default_timezone_set( '美洲/洛杉矶'); -08:00在php.ini中设置
$date = "2014-01-01 12:00:00";
$new_time_zone = "America/New_York" // -05:00 = +3 hours difference
function adjust_time_zone($string, $zone){
$datetime = new DateTime($string);
$new_zone = new DateTimeZone($zone);
$datetime->setTimezone($new_zone);
return ($datetime->format('Y-m-d H:i:s'));
}
adjust_time_zone($date, $new_time_zone);
结果(我测试了这个):
2014-01-01 15:00:00 //3 hours ahead.
在这种格式中,系统中标记的所有内容都将在洛杉矶时间进行,并且导出将是更改......
我知道有这些Timezone线程的分配,但似乎有很多“我这样做”并没有任何坚实的“这样打击我的袜子=”
感谢您提供任何帮助!
答案 0 :(得分:2)
我将数据库中的所有内容存储为日期时间和UTC时区。
我将用户的时区存储在db($ timezone)中。
因此,当从db中获取时间($ time)时,我将通过以下函数运行它:
function changetimefromUTC($time, $timezone) {
$changetime = new DateTime($time, new DateTimeZone('UTC'));
$changetime->setTimezone(new DateTimeZone($timezone));
return $changetime->format('m/d/y h:i a');
}
这将返回用户时区的格式化时间。
编辑:你可以在这个帖子中看到时区的db表:
答案 1 :(得分:2)
看起来你所拥有的应该适合你。这是一种替代方法,但不一定更好。您可以使用PHP的mktime
并将小时偏移量传递给它。
<?php
print "<br>Date: ".date("Y-m-d H:i:s");
// DEFINE AN OFFSET
$offset = -5; // TIMEZONE OFFSET: '-5' FOR NEW YORK
// ADD THE OFFSET TO THE CURRENT TIME
print "<br>Date Offset: ".$date_offset = date("Y-m-d H:i:s", mktime(date("H") + $offset, date("i"), date("s"), date("m"), date("d"), date("Y")));
答案 2 :(得分:1)
我找到了解决该问题的好方法-并根据用户设置调整页面上的日期和时间设置。
准备构建js代码 有些完全相同的问题的开发人员会为代码构建JavaScript解决方案。只要遵循这些说明,就不需要了解javascript。
在您的php文件中输入以下代码:
echo '
<script src="js/jstimezonedetect/dist/jstz.min.js"></script>
<script>
document.cookie = "usertimezone="+jstz.determine().name();
</script>
';
$settimezone = $_COOKIE['usertimezone'];
date_default_timezone_set($settimezone);
脚本的第一行将从importat jstimezonedetect项目中导入jstz.min.js文件。
第二行将创建一个cookie(如果需要,您以后可以删除该cookie)。
在第三行中,将Cookie放入php脚本中,然后使用PHP date_default_timezone_set(); (https://www.php.net/manual/en/function.date-default-timezone-set.php) 设置时区。
非常适合我。 :)询问是否不清楚。