0

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

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

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

假设有人选择在以下日期/时间发出警报:

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

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

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

4

1 回答 1

4

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

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

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

另一种方法是使用DateTimeandDateTimeZone类。如此处所示,这两个类是如何工作的,您创建了两个DateTimeZone对象,一个带有您的时区,一个带有他们的时区;创建两个DateTime对象,第一个参数是"now",第二个是对上述DateTimeZone对象的引用(分别);然后在您的时区对象上调用该getOffset方法,将他们的时区对象作为第一个参数传递,最终以秒为单位获得偏移量,该偏移量可以添加到当前的 unix 时间戳以获得他们的作业需要运行的时间。

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

关于 strtotime 的快速说明: Strtotime 是 date() 命令的一个简单对立面,并且不会比实现您正在寻找的“工具”更有用。它本身不会为您转换或找到偏移量;它只是将格式化的日期和时间转换为 unix 时间戳。

于 2010-11-16T21:36:58.067 回答