热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php–管理时区

我已经浏览了很多时区/PHP帖子,大多数建议以UTC格式存储您的日期时间字段,然后在存储和显示日期时间信息时使用应用程序用户时区偏移量.我遇到的问题我继承了一个不是时区感知的应用

我已经浏览了很多时区/ PHP帖子,大多数建议以UTC格式存储您的日期时间字段,然后在存储和显示日期时间信息时使用应用程序用户时区偏移量.

我遇到的问题我继承了一个不是时区感知的应用程序,现在我需要迎合这个问题.

服务器已设置为“EST 11:00 Australia / Melbourne”,并且已经有从该服务器运行的应用程序.所以我无法改变这一点.

幸运的是,我知道用户的时区偏移,即-05:00等.

该应用程序使用Javascript日期并使用PHP的strtotime()函数解析它们并存储在MySQL数据库中,如下所示:

$event_starts = date('Y-m-d H:i:s',
strtotime('Thu Dec 02 2010 11:15:00 GMT+1100 (AUS Eastern Daylight Time)');

因此,如果服务器未设置为UTC,那么有没有人对如何使这个应用程序时区有所了解的最佳方法有任何建议?

非常感谢,J.

解决方法:

这不是一件容易的事.

首先,请考虑现有存储日期是服务器的本地时间,这可以观察夏令时.除了现在或将来打印它们之外,任何必须对这些日期执行任何操作的代码都需要先将它们转换为UTC.如果夏令时规则在存储日期的时间点和当前时间(转换发生时)不完全相同,则服务器将使用“当前”规则,从而产生错误的结果.当然,这种情况在你的特定情况下可能是牵强附会的(或者可能不是这样),但是对于存储除UTC之外的任何东西,这是一个非常强烈的警告.

假设DST规则保持不变,并且您有PHP> = 5.3.0,则可以执行以下操作:

>使用DateTime :: createFromFormat读取“原始”数据库日期,显式指定时区(服务器的TZ)
>使用DateTime :: setTimezone(指定用户的TZ)转换为用户本地时间
>向用户显示

接收用户输入时,您需要执行相反的操作:

>使用DateTime :: createFromFormat创建用户本地时间日期,显式指定时区(用户的TZ)
>使用DateTime :: setTimezone(指定服务器的TZ)转换为服务器本地时间
>存储在数据库中

除了上述内容之外,我建议您在某个时候使应用程序脱机并将数据库中的所有日期转换为UTC.然后你就可以摆脱前面讨论过的问题(至少在未来,因为过去无法撤消).我上面提到的“服务器的TZ”将是UTC(无论实际服务器是否设置为AUS EDT,您的“工作”时区将是UTC).


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
高朗1_114
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有