每个用户的自动时区转换器

时间:2012-03-07 01:07:42

标签: php javascript mysql time

我正在运行评论脚本,我想确定每个帖子的添加时间。

虽然它在挪威19:21发布,但它在其他地方的20:21发布了。 女巫也会使“时间”无用。

你明白这个问题吗?

我基本上是在寻找一种方法来改变每个用户本地区的时间。

有人能为我提供解决方案吗? 我目前正在使用php,但我也可以使用javascript。

我见过一个网站使用这个代码:document.write(GetElapsedTime(1330160527)); 但话说回来,我不知道如何获得每个时间价值。

3 个答案:

答案 0 :(得分:0)

在Javascript中,new Date().getTime()返回自1970年1月1日午夜当地时间以来的毫秒数,即基于浏览器的时区。要将此转换为服务器的时间,服务器必须使用自1970年1月1日以来经过的毫秒计算来渲染页面,您可以使用Javascript将浏览器的时间转换为服务器的时区,如下所示:

var serverTime = 1330160527; // Sever's time rendered by PHP
// Calculate time difference, rounding it to nearest half hour.
var timeDifference = Math.round ( (new Date().getTime() - 1330160527) 
         / (30 * 60 * 1000) ) * (30 * 60 * 1000); 

// Later, when we post the time to the server, we adjust by timeDifference
var localTime = (new Date()).setTime(new Date().getTime() - timeDifference);

请注意,我们将时差(以毫秒为单位)舍入到最接近的半小时,因为两个不同的时区必须相隔至少半小时,但绝不是一小时的一小部分。

答案 1 :(得分:0)

您是否可以访问用户时区信息?如果你这样做,你可以在php中完成,假设你将发布的时间保存在unix时间戳中。如果没有,那么你将不得不使用javascript。

$time = time(); // Current time in unix timestamp
$timezone = new DateTimeZone('Europe/London');  // Desired timezone

$datetime = new DateTime(); 
$datetime->setTimezone($timezone); 
$datetime->setTimestamp($time);
echo $datetime->format('Y-m-d H:i:s');

答案 2 :(得分:0)

如果您向客户端发送UTC时间戳(即自1970年1月1日00:00或1970-01-01T00:00:00之后的00:00),您可以使用以下命令将其转换为javascript中的本地时间:

// Just to get local timezone offset
var tmp = new Date();

// Adjust timestamp to local time and create a local date object
var localTime = new Date(timestamp - tmp.getTimezoneOffset() * 6e4);

将javascript时区偏移量作为分钟返回,以添加到获取UTC的本地时间,因此对于UTC + 10的时区,它是-600。您可以通过反转操作返回等效的时间戳:

var tmp = new Date();
var UTCtimestamp = tmp + tmp.getTimezoneOffset() * 6e4 

当然,这一切都取决于本地机器的时钟设置是否准确。