基本的PHP时区转换

时间:2010-11-16 17:08:26

标签: php datetime strtotime datetimeoffset

我已经看过以前的问题,似乎没有什么能符合我的要求。

我正在研究一个调度系统,现在客户想要添加时区。

所以基本上我需要能够在特定的日期和时间制定行动。

让我们说有人选择在以下日期/时间发出警报:

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

我需要能够将它作为unix_timestamp存储在mysql中,我一直在看PHP的DateTime和DateTimeZone,但这让我更加困惑。

我也看了strtotime,我只是不确定用偏移来计算日期/时间的最佳方法。

1 个答案:

答案 0 :(得分:4)

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

有两种方法可以解决这个问题;从你的帖子判断,你对你想要使用的内容感到困惑。

第一种方式是最简单(也是最合乎逻辑)的方式,即存储它们的偏移量(如果你已经拥有它),并将其乘以3600(1小时,以秒为单位),然后添加< em> 值到当前的unix时间戳,以获得最终的运行时间。

另一种方法是使用DateTimeDateTimeZone类。如here所示,这两个类的工作方式是创建两个DateTimeZone个对象,一个包含您的时区,另一个包含您的时区;创建两个DateTime个对象,其中第一个参数为"now",第二个参数是对上面DateTimeZone个对象的引用(分别);然后在你的时区对象上调用getOffset方法,将他们的时区对象作为第一个参数传递,最终得到可以添加到当前的unix时间戳,以获取他们的作业需要运行的时间。

如果我自己这么说,第二种方式对于这么简单的任务来说似乎要复杂得多,所以第一种解决方案可能更适合您的需求。但是,如果您希望使用更完整的方法,那么使用DateTimeDateTimeZone肯定是可能的。

关于strtotime的快速说明:Strtotime与date()命令相反,并且除了“工具”之外不再有任何用途来实现您正在寻找的东西。它本身不会为您转换或找到补偿;它只是将格式化的日期和时间转换为unix时间戳。