2010-11-16 29 views
0

我已经看过以前的问题,没有任何东西可以满足我的要求。基本的PHP时区转换

我正在调度系统上工作,现在客户想要添加时区。

所以基本上我需要能够在特定的日期和时间形成一个行为。

比方说,有人选择在以下日期/时间,有一个警告:

25-12-2010 13时01分00秒+/- 他们的时区

我需要能够存储此在MySQL作为unix_timestamp,我一直在寻找PHP的日期时间和DateTimeZone,但这使我更困惑。

我也看过strtotime也,我只是不确定的最好的方式来计算日期/时间偏移量。

+0

@Kyle Hudson - 将时间仅存储在执行服务器时区中,并列中列出您的客户端时区与执行服务器时区之间的区别,例如您的客户端时区比执行时间快3600秒服务器,所以存储-3600,并总结它 – ajreal 2010-11-16 17:18:34

+1

为什么不能使用DateTime或Timestamp列?此外,请参阅这里[关于使用DateTime和DateTimezone的示例](http:// stackoverflow。COM /问题/ 2095020 /怎么办,你变化最时区功能于PHP换一个存在的时间戳/ 2095165#2095165)。 – Gordon 2010-11-16 17:21:00

+0

@Gordon +1,@ajreal:不会是+3600吗? – 2010-11-16 17:27:58

回答

3

为了确保我们处于同一页面,我只想重申一个unix时间戳仅仅是自“Unix Epoch”(1970年1月1日)以来的秒数。因此简单的数学运算将在unix时间戳上起作用。

有两种方法可以解决这个问题;从你的帖子来看,你对你想使用哪一个感到困惑。

第一种方式是最简单的(也是最合理的)方法,那就是存储它们的偏移量(如果你已经拥有它),然后乘以3600(1秒钟),然后添加表示值为当前unix时间戳以获得其最终运行时间。

另一种方法是使用DateTimeDateTimeZone类。 here如何显示这两个类的工作方式是创建两个DateTimeZone对象,一个带有您的时区,另一个带有它们;创建两个DateTime对象,其中第一个参数为"now",第二个参考分别为上面的对象DateTimeZone;然后调用传递他们时区对象作为第一个参数时区对象的getOffset方法,最终让你在可以添加到当前Unix时间戳来获取时间他们作业需要秒偏移跑。

如果我自己这样说,第二种方式似乎要复杂得多,因此第一种解决方案可能更适合您的需求。但是,如果您希望采用更完整的方法,那么使用DateTimeDateTimeZone肯定是可能的。

关于strtotime的简要说明:strtotime与date()命令相反,并且不会比用“工具”来实现你要找的东西更有用。它本身不会为你转换或找到抵消;它只是将格式化的日期和时间转换为unix时间戳。

+0

伟大的洞察力谢谢+1 – 2010-11-17 10:19:06