好的,所以我不确定我是否将用户输入时间正确转换为 GMT。我将让多个时区的用户输入“事件”,他们必须能够看到当前的“直到多久”或“多久之后”time();
这就是我打算如何转换他们输入的时间。它会像07/21/2011 01:30 am
Then 一样开始,
echo gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am'));
给我2011-07-21 08:30:00
所以我打算取gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am'));
然后取值time()
并向用户显示“距离这个事件还有多长时间”。但似乎结果总是增加了 10 小时,所以如果我从现在开始 30 分钟安排一个活动,它会说从现在开始 10 小时 30 分钟。所以,我想我没有正确转换当地时间或其他东西。
我错过了什么?也许我只是没有正确理解格林尼治标准时间。如何确保所涉及的所有时间都是 GMT 时间,以便所有时间对网站上的所有用户都是通用的?
其他信息(如果有帮助):服务器时区是America/Los_Angeles
编辑:在大家的建议之后,我尝试在我的 php 代码顶部设置它:
date_default_timezone_set("GMT");
我试着用date('Y-m-d H:i:s')
做比较来找出差异,但它说的是“3 小时前”而不是 10 小时后。所以这肯定改变了事情。
但仍然不正确。
我已确认date('Y-m-d H:i:s')
返回正确且当前的 GMT。所以这很好。
但用户输入日期已关闭。我如何错误地转换它?
再次编辑(包括 Salman A 建议后的一些测试结果):
2:55am - 我当前的当地时间 EST
date('Y-m-d H:i:s')
显示为2011-07-21 06:56:43
- 这是正确的
东部标准时间凌晨 3:00 是我提交的未来时间07/21/2011 03:00 am
这是我如何获得时间“转换”并将其提交到我的数据库:
$time = $_POST['time'];
//there is where im assuming it turns my EST time to the GMT equivalent.
$the_date = strtotime($time . ' GMT');
$utctime = gmdate('Y-m-d H:i:s',$the_date);
我希望我的功能会告诉我该事件是从现在开始的 5 分钟,但它会休息几个小时。
只是为了确保用户提交的时间实际上被转换为 GMT 我显示$utctime
并且它显示为 2011-07-21 03:00:00
- 这不是 08:00 或 07:00(我认为其中之一将是 GMT 等价的)
那么我该如何转换呢?
所以,我看到的strtotime($time . ' GMT');
似乎并没有将格林威治标准时间应用于我提供的当地时间。附带说明:有人建议我date_default_timezone_set("GMT");
在我的代码中有,所以我把它放在顶部。我应该删除它吗?但我注意到如果我删除它,格林威治标准时间不正确。所以这就是我离开它的原因。