【问题标题】:Maybe a dumb question on timezones也许是关于时区的愚蠢问题
【发布时间】:2010-01-06 01:34:26
【问题描述】:

我把自己弄糊涂了,我需要和你们一起仔细检查一下。对不起,如果这真的是一个愚蠢的问题..

好的 - 我有一个在 Linux 上运行的 PHP Web 应用程序,它需要支持时区。我提供了一个日历小部件,允许用户设置他们的时区,然后为某些事件选择日期和小时/分钟。

然后我通过使用将该值作为 int 存储在记录中。当我需要再次向用户显示日期时,我只需获取他们的时区设置并应用于 int 值。

代码:

$dtzone = new DateTimeZone($time_zone);
$dtime = new DateTime($date_time, $dtzone);
$timestamp = $dtime->format('U');
return $timestamp;

注意事项: $date_time 采用这种格式 'YYYY-MM-DD H:S' $time_zone 是他们选择的,例如:美国/牙买加

现在我将返回的 int 存储在数据库中。

然后我有一个我通过 CRON 执行的 PHP 脚本,该脚本在澳大利亚悉尼的服务器中运行。

我的理解是,我的脚本需要做的就是通过 time() 获取服务器当前时间戳,然后在数据库中搜索与 time() 调用产生的整数完全相同的整数。我不必担心用户用于选择日期/时间的时区。

请注意,CRON 必须每分钟运行一次,因为我也允许用户选择分钟。

这个假设正确吗?

干杯

马克

【问题讨论】:

    标签: php timezone


    【解决方案1】:

    如果您将时间戳存储为 int,那么您很可能使用始终为 UTC 的 unix 时间戳。无论在何处生成,unix 时间戳都是相同的。无论是牙买加、悉尼还是火星。

    【讨论】:

    • 谢谢 Mike - 它让所有关于 UTC、GMT 和偏移量的讨论变得混乱。我认为我们都使用 1970 年 Unix 魔术时间集中的相同“时间流”,因此当使用该代码将时间转换为 int 时,它代表了我们都共享的确切时间点。
    • 这正是unix时间戳所代表的。 UTC 代表所有时区都会改变的“协调世界时间”(即 Etc/GMT-5)。 UTC 是基础,因此是最适合 Unix 时间戳的时间标准。
    • 你好,我想知道是否有人知道如何处理以下问题 - 继续我的时间戳传奇。当用户选择的日期/小时/分钟的时间戳保存到数据库时,秒设置为 00 - 我假设 00,因为当我将时间戳转换回日期格式时,秒为“00”。因此,我可以有一个 1262746260 的时间戳。查看 linux cron 日志,我可以看到 CRON 实际上在一分钟后 1 秒运行。因此,当在服务器上为比较搜索生成当前时间戳时,整数可以至少相差 1 秒..
    • 因此它永远不会找到任何时间戳匹配! mySQL 是否有这样的格式:“在 10 秒内查找时间戳为 'timestamp' 的所有记录”这将允许我的 CRON 定位记录,即使为搜索生成的时间戳不完全是 1分零秒。
    • MySQL 的 BETWEEN 运算符可能会有所帮助。您可能还想为此创建另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多