Php 获得时区GMT时间?

Php 获得时区GMT时间?,php,mysql,date,Php,Mysql,Date,我一直在使用DATETIME列在数据库中存储用户消息。我需要向不同国家/地区的用户显示消息的发送时间,因为数据库使用GMT+0,所以我需要根据用户的时区调整检索到的时间 当前用户的时区已设置为date_default_timezone_set() 编辑 遵循@doniyor的理念,我就是这么做的: // Get server hour $localtime = localtime(); $serverHour = $localtime[2]; # The server's timezone i

我一直在使用DATETIME列在数据库中存储用户消息。我需要向不同国家/地区的用户显示消息的发送时间,因为数据库使用GMT+0,所以我需要根据用户的时区调整检索到的时间

当前用户的时区已设置为date_default_timezone_set()

编辑

遵循@doniyor的理念,我就是这么做的:

 // Get server hour
$localtime = localtime();
$serverHour = $localtime[2]; # The server's timezone is used by default before defining one

// Set timezone
date_default_timezone_set('user's timezone goes here');

// Get user hour
$localtime = localtime(); # Now localtime gives the user's time since timezone has been changed
$userHour = $localtime[2];
$timeAdjustment =  $userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : $userHour - $serverHour; // Calculate hours to add to rows got from db to match user's time

// Example of a row adjusted to match user's time
    $adjustTime =  ($userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : ($userHour - $serverHour > 12 ? $userHour - $serverHour - 24 : $userHour - $serverHour)*60*60; // strtotime is in seconds so $timeAdjustment needs *60*60 to convert to seconds too
//获取服务器小时数
$localtime=localtime();
$serverHour=$localtime[2];#在定义时区之前,默认情况下使用服务器的时区
//设定时区
日期\默认\时区\设置('用户的时区在此处');
//获取用户小时数
$localtime=localtime();#现在localtime提供用户自时区更改后的时间
$userHour=$localtime[2];
$timeAdjustment=$userHour-$serverHour<-12?24+$userHour-$serverHour:$userHour-$serverHour;//计算要添加到从db获取的行中的小时数,以匹配用户的时间
//调整行以匹配用户时间的示例
$adjustTime=($userHour-$serverHour<-12?24+$userHour-$serverHour:($userHour-$serverHour>12?$userHour-$serverHour-24:$userHour-$serverHour)*60*60;//strtotime以秒为单位,因此$timeAdjustment也需要*60*60转换为秒

我已经在PHP5+Apache上对此进行了测试,但结果可能因服务器配置而异。

如果错误,请不要否决:)


如果在客户端浏览器中获取时区时间并检查差异,如果存在差异,则根据客户端的位置添加或减去此差异值

如果错了,请不要投反对票:)

如果在客户端浏览器中获取时区时间并检查差异,如果存在差异,则根据客户端的位置添加或减去此差异值

当前用户的时区已设置为date_default_timezone_set()

你不能。由于夏令时的变幻莫测,偏移量不是恒定的——它可以根据日期而变化

使用(连同一点字符串解析)将GMT日期/时间转换为UNIX时间戳,然后使用在当前时区中显示该时间戳

当前用户的时区已设置为date_default_timezone_set()

你不能。由于夏令时的变幻莫测,偏移量不是恒定的——它可以根据日期而变化


使用(连同一点字符串解析)将GMT日期/时间转换为UNIX时间戳,然后使用在当前时区中显示该时间戳。

只需将日期值的值作为UNIX时间戳传递给JavaScript即可。例如,使用AJAX:

echo json_encode(array(
    'time' => strtotime($row['msg_time']),
    'msg' => 'hello world',
));
然后,使用
Date()
将其转换为用户的本地时间:

var msgTime = new Date(data.time * 1000);

只需将日期值的值作为UNIX时间戳传递给JavaScript即可。例如,使用AJAX:

echo json_encode(array(
    'time' => strtotime($row['msg_time']),
    'msg' => 'hello world',
));
然后,使用
Date()
将其转换为用户的本地时间:

var msgTime = new Date(data.time * 1000);

尝试使用unix时间戳,然后将其转换为datesIt,因为页面是使用Datetime构建的,所以如果我更改为时间戳,我可能会使用unix时间戳得到很多错误,然后将其转换为datesIt,因为页面是使用Datetime构建的,所以,如果我改为时间戳,可能会有很多错误。你是说,比较我服务器上的时间和用户的时间?这会起作用,但我不知道如何获取数据库/服务器用于将其与用户当前时间进行比较的时间也必须有类似的get_server_time()函数,我正在路上,现在不能用谷歌搜索:我浏览了一点,但找不到这样的函数,然而,我发现在设置用户时区之前获取时间使用服务器的默认时区有效地获取服务器的时间。所以我只是在设置时区之前获取它,然后再获取用户的时间。我接受了答案并复制了代码。太棒了!很高兴能够帮助得分比我高的人:你是说比较我服务器上的时间和用户的时间?这会起作用,但我不知道如何获取数据库/服务器用于将其与用户当前时间进行比较的时间也必须有类似的get_server_time()函数,我正在路上,现在不能用谷歌搜索:我浏览了一点,但找不到这样的函数,然而,我发现在设置用户时区之前获取时间使用服务器的默认时区有效地获取服务器的时间。所以我只是在设置时区之前获取它,然后再获取用户的时间。我接受了答案并复制了代码。太棒了!很高兴能够帮助得分比我高的人:D