PHP时区根据用户调整

时间:2014-03-06 19:33:22

标签: php mysql datetime

我正在创建一个用户可以选择时区的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线程的分配,但似乎有很多“我这样做”并没有任何坚实的“这样打击我的袜子=”

感谢您提供任何帮助!

3 个答案:

答案 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表:

Generating a drop down list of timezones with PHP

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

  1. 转到https://bitbucket.org/pellepim/jstimezonedetect/src/default/
  2. 如果需要,请通读自述文件
  3. 要么以NPM软件包的形式下载脚本,要么通过按左侧菜单中的“下载”来手动下载脚本。
  4. 如果按“下载”以手动下载脚本,请按“下载存储库”以获取文件。
  5. 在您的项目中创建一个js文件夹-名为“ js”。 (可选)
  6. 将jstimezonedetect文件解压缩到js文件夹中。我选择将解压缩的文件命名为“ jstimezonedetect”。
  7. 要到达我当前目录上方的文件是/ js / jstimezonedetect /。
  8. 在标头代码中(重要的是在标头中,因为除非运行函数,否则时区会影响页面其余部分的完整代码。
  9. 在您的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) 设置时区。

非常适合我。 :)询问是否不清楚。