Php 也许是个关于时区的愚蠢问题

Php 也许是个关于时区的愚蠢问题,php,timezone,Php,Timezone,我把自己弄糊涂了,我需要和你们大家再核实一下。如果这真是个愚蠢的问题,我很抱歉 好的-我有一个在Linux上运行的PHP web应用程序,它需要支持时区。我提供了一个日历小部件,允许用户设置时区,然后为某些事件选择日期和小时/分钟 然后,我使用将该值作为int存储在记录中。当我需要再次向用户显示日期时,我只需要获取他们的时区设置并应用于int值 代码: 注: $date\u时间的格式为“YYYY-MM-DD H:S” $时区是他们选择的,例如:美国/牙买加 现在我将返回的int存储在数据库中 然

我把自己弄糊涂了,我需要和你们大家再核实一下。如果这真是个愚蠢的问题,我很抱歉

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

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

代码:

注: $date\u时间的格式为“YYYY-MM-DD H:S” $时区是他们选择的,例如:美国/牙买加

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

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

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

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

这个假设正确吗

干杯


Marc

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

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

谢谢你,迈克-关于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操作符可能会有所帮助。你可能还想为这个问题提出另一个问题。谢谢迈克-它会让所有关于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操作符可能会有所帮助。您可能还需要为此创建另一个问题。
$dtzone = new DateTimeZone($time_zone);
$dtime = new DateTime($date_time, $dtzone);
$timestamp = $dtime->format('U');
return $timestamp;