【发布时间】:2015-11-06 19:47:51
【问题描述】:
我有一个表单,用户将在其中输入电子邮件活动的日期和时间。作为表单验证的一部分,我确认用户输入了未来的日期。
当前服务器默认时区为 UTC。
用户将以字符串形式输入预定的日期和时间(由 JQuery 日期和时间选择器生成)。
输入的字符串被转换为时间戳,然后与当前日期和时间进行比较。
如果输入的日期和时间早于当前日期和时间,则不会提交表单并通知用户重新输入未来的日期。
问题是,如果用户在当前时间(太平洋时区)的未来 8 小时内输入未来时间和日期和时间,系统会认为它是过去的,因为服务器时区是 UTC (比太平洋标准时间早 8 小时)。
我尝试使用 gmdate 将用户输入转换为 UTC,如下所示:
//$timeEntered is a string, like 2015/11/06 19:27:21:
$timeEntered = $_POST['date_and_time']
$theEnteredTimeInUnixTimestamp = strtotime ( $timeEntered );
$enteredTimeInGMT = gmdate('Y-m-d H:i:s', $theEnteredTimeInUnixTimestamp );
但它不会转换它。我是否应该在输入的日期和时间上增加 8 小时,使其与当前服务器时间 (UTC) 匹配?那将是愚蠢的,因为这会在夏令时发生变化。
是否应该在进行比较时将当前服务器时区更改为太平洋时间,以便时区匹配?如果用户处于不同的时区,这将产生意想不到的结果。我不知道如何处理这个问题,让它可靠地将输入的时间与当前时间进行比较并给出正确的结果。
【问题讨论】: