Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算大型应用程序的时区偏移?_Php_Mysql_Timezone_Utc - Fatal编程技术网

Php 如何计算大型应用程序的时区偏移?

Php 如何计算大型应用程序的时区偏移?,php,mysql,timezone,utc,Php,Mysql,Timezone,Utc,在处理大型应用程序时,我试图使日期时间戳与当前用户时间一致。因此,如果活动id在下午3:00完成,那么每个用户都会在下午3:00看到它 下面是问题的解决步骤。如果我的方向不对,请纠正我或将我引向正确的方向 将MySql中的所有datetime存储为UTC时间 将时区存储在具有当前偏移量的表中。比如说 zone_id zone_name utc-offset 1 Central -6 在我的用户表中,我有一个用户\时区\ id字段,在该字段中,我将在用户设置中有值“1”

在处理大型应用程序时,我试图使日期时间戳与当前用户时间一致。因此,如果活动id在下午3:00完成,那么每个用户都会在下午3:00看到它

下面是问题的解决步骤。如果我的方向不对,请纠正我或将我引向正确的方向

  • 将MySql中的所有datetime存储为UTC时间

  • 将时区存储在具有当前偏移量的表中。比如说

    zone_id  zone_name  utc-offset
    1        Central    -6
    
  • 在我的用户表中,我有一个用户\时区\ id字段,在该字段中,我将在用户设置中有值“1”,因此它将表示该用户正在“中心”位置使用系统

  • 在我的php应用程序配置中,我将默认时区设置为UTC,如下所示

    date_default_timezone_set('UTC');
    
  • 加载此应用程序后,我定义了用户偏移量,并在每个datetime out put上计算时间。例如
    date('Y-m-d',strotime('current_offset.'hour')),其中$current_offset=-6
    ,这是用户配置文件在页面加载时定义的

  • 以下是我的问题

    我处理这个问题的方法正确吗? 有更好的方法吗?
    如何计算夏令时?请记住,美国有些地方没有夏令时。

    我有一次也遇到过类似的情况,结果是很难跟踪用户时区和夏令时,尤其是当你一半的客户在没有夏令时的亚利桑那州时。我不知道这对您是否可行,但我最终做的只是将所有内容存储在UTC中,然后使用JS将其转换为用户本地时间,并使用
    Date
    对象。这是通过ajax调用完成的,但是您也可以
    回送
    文档。如果需要,可以编写

    您不需要使用
    日期\u默认\u时区\u设置
    ,使用具有时区本机支持的。或者,就像@romo所说的,您可以在JavaScript的客户端上执行此操作。

    不要手动执行偏移。使用date\u default\u timezone\u set()将应用程序设置为用户的时区。还有一点是,你不应该把时间浪费在PHP自动运行的时间上。哦,这是个好主意。因此,将页面设置为当前用户设置,然后当用户加载页面时,所有内容都将转换为他/她当前的日期时间。但是等一下,当他们想要编辑datetime字段时会发生什么呢?我不建议使用
    date\u default\u timezone\u set
    。因此,当数据库中的日期位于与PHP不同的时区时,可能会导致问题和混乱。它还可能会弄乱意外的事情,例如,日志文件输出中的时间戳。@Adrian在将日期/时间保存到数据库时使用无时区上下文。i、 unix时间戳-或者像OP已经说的那样将所有内容存储在UTC datetime字段中。,,PHP处理亚利桑那州、印第安纳州和所有其他时髦的偏移量,只要您正确设置时区就可以了。我如何使用PHP datetime类来实现这一点?我对那门课不熟悉,也从未用过。你能详细说明一下如何使用它来解决我的问题吗?谢谢你在我的原始帖子中,它链接到了这个类的PHP手册页面,它解释了如何使用它。您可以使用日期初始化它并调用
    setTimezone
    ,它会自动切换到指定的时区。然后,您可以使用class
    format
    方法将移位后的日期取回来或直接格式化,而不需要使用
    date()
    。好的,我试着按照这个例子,我没有得到任何时间更改,这是我迄今为止所做的$user\u time\u zone=new DateTimeZone('Europe/Warsaw')$schedule_date=新的日期时间($call['triggerOn'],$user_time_zone);echo$schedule\u date->format('Y-m-dh:ia')。时间没有被转换。阿德里安,这是$call['triggerOn']2013-02-27 18:00:37的一个输出,如果是UTC,你需要在构造函数中传递UTC作为时区(它用来解释传递给构造函数的时间)然后可以对刚刚创建的对象调用
    setTimezone
    ,将其转换为用户的时区。基本上,您必须为转换指定“from”和“to”时区:在构造函数中指定“from”,然后在结果对象的方法调用中指定“to”。