我有一个表单,用户将输入一个日期和时间的电子邮件活动。作为表单验证的一部分,我确认用户输入了未来的日期。
当前服务器默认时区为UTC。
用户将输入计划的日期和时间作为字符串(由JQuery日期和时间选择器生成)。
输入的字符串转换为时间戳,然后与当前日期和时间进行比较。
如果输入的日期和时间早于当前日期和时间,则未提交表单,并通知用户重新输入未来日期。
问题是,如果用户在当前时间(即太平洋时区)的未来8小时内输入未来时间和时间,系统会认为这是过去的,因为服务器时区是UTC (比PST提前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)相匹配?这将是愚蠢的,因为这将改变在夏令时。
在进行比较时,是否应该将当前服务器时区更改为太平洋时间,以便时区匹配?如果用户位于不同的时区,则会产生意外的结果。我不知道如何处理这个问题,以便可靠地比较输入的时间和当前的时间,并给出正确的结果。
发布于 2015-11-06 20:13:38
$user_date_str = '2015/11/06 19:27:21';
$user_tz = 'America/Los_Angeles';
$server_tz = 'UTC';
// Get a DateTime object for the user entered time
$user_datetime = new DateTime($user_date_str, new DateTimeZone($user_tz) );
// Change time zone to the same as the server
$user_datetime->setTimeZone(new DateTimeZone($server_tz));
// Get a DateTime object for the current server time
$server_datetime = new DateTime();
// If the PHP timezone isn't set correctly, you can also do:
//$server_datetime = new DateTime(null, new DateTimeZone($server_tz) );
// Now compare
if ($user_datetime < $server_datetime) {
// handle the error
}发布于 2015-11-06 19:52:53
strtotime()不是魔法。你不能把任何旧的日期都扔进去,然后期望得到一个有效的结果。看起来,如果您将反斜杠改为连字符,它应该会工作。有关在strtotime:http://php.net/manual/en/datetime.formats.compound.php中使用的有效日期格式,请参阅此页面
编辑..。
其实你的电话没问题..。https://3v4l.org/vCsDb
我想这就是你要找的..。http://php.net/manual/en/function.date-default-timezone-set.php
打电话给页面顶部的date_default_timezone_set ('America/Los_Angeles')。使用正确的时区..。
Eastern ........... America/New_York
Central ........... America/Chicago
Mountain .......... America/Denver
Mountain no DST ... America/Phoenix
Pacific ........... America/Los_Angeles
Alaska ............ America/Anchorage
Hawaii ............ America/Adak
Hawaii no DST ..... Pacific/Honoluluhttp://php.net/manual/en/timezones.america.php
https://stackoverflow.com/questions/33574546
复制相似问题