首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php -将输入日期与当前日期进行比较,并得到错误的结果,因为服务器时区与输入的时区不同。

php -将输入日期与当前日期进行比较,并得到错误的结果,因为服务器时区与输入的时区不同。
EN

Stack Overflow用户
提问于 2015-11-06 19:47:51
回答 2查看 818关注 0票数 0

我有一个表单,用户将输入一个日期和时间的电子邮件活动。作为表单验证的一部分,我确认用户输入了未来的日期。

当前服务器默认时区为UTC。

用户将输入计划的日期和时间作为字符串(由JQuery日期和时间选择器生成)。

输入的字符串转换为时间戳,然后与当前日期和时间进行比较。

如果输入的日期和时间早于当前日期和时间,则未提交表单,并通知用户重新输入未来日期。

问题是,如果用户在当前时间(即太平洋时区)的未来8小时内输入未来时间和时间,系统会认为这是过去的,因为服务器时区是UTC (比PST提前8小时)。

我尝试使用gmdate将用户输入转换为UTC,如下所示:

代码语言:javascript
复制
//$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)相匹配?这将是愚蠢的,因为这将改变在夏令时。

在进行比较时,是否应该将当前服务器时区更改为太平洋时间,以便时区匹配?如果用户位于不同的时区,则会产生意外的结果。我不知道如何处理这个问题,以便可靠地比较输入的时间和当前的时间,并给出正确的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 20:13:38

代码语言:javascript
复制
$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
}
票数 1
EN

Stack Overflow用户

发布于 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')。使用正确的时区..。

代码语言:javascript
复制
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/Honolulu

http://php.net/manual/en/timezones.america.php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33574546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档