如何调整客户端和服务器的时间戳差异

how to adjust timestamp difference of client and server?

本文关键字:服务器 时间戳 客户端 何调整 调整      更新时间:2023-09-26

向用户显示消息"发送时间"的最佳方式是什么?用"服务器端时间()函数"保存更好,还是用"客户端getTime()"保存并用ajax更新该值更好?

如果服务器和客户端位于不同的时区,请将其中一个时区设置为与另一个时区相同,或者使用时区差异(例如+2小时),然后根据其中一个日期调整所有日期(通过添加/减去时区差异)

或者,客户端可以始终显示服务器发送的日期,并且完成

例如,如果你有服务器时区差异,只需在客户端显示它(如果这对你的用例有利,你不需要其他任何东西)

2016-01-03 17:12:00 (+1 GMT)

例如:

在客户端(或服务器,但不是两者)中添加时区差异(+1小时)

例如在服务器中(php DateTime)

$server_date = date('Y-m-d H:i:s');
$client_date = DateTime::createFromFormat( 'Y-m-d H:i:s', $server_date );
$client_date->add( new DateInterval('PT'.(60*60).'S') ) // + 1 hour
$client_date = $client_date->format('Y-m-d H:i:s');

或者在客户端(js使用moment.js或DateX等库)

var client_date = new Date(timestamp(server_date, 'Y-m-d H:i:s')+60*60*1000); // + 1 hour;
// timestamp is supposed to parse the date and return a unix timestamp in milliseconds
// for example if you use DateX, you can do:
// client_date = new DateX(DateX.fromString(server_date,'Y-m-d H:i:s').getTime()+60*60*1000).format('Y-m-d H:i:s');

第三种选择是服务器始终发送UTC(GMT)日期,并让客户端将其转换为本地/时区日期(与上述类似,只有客户端使用自己的时区偏移量,而不是硬编码,例如+1小时)

服务器是您唯一可以控制的机器,因此也是您唯一可以依赖的机器。但要注意夏令时。

我建议将服务器上的所有日期存储为UTC,然后在浏览器中转换为本地时间。这样做也有助于你考虑夏令时的变化,这种变化发生在世界各地的不同时间。

为了说明这一点,如果您在服务器端执行此操作,那么以下C#代码将UTC转换为本地时间,并计入夏令时:

DateTime utc = DateTime.UtcNow;
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(utc, zone);

我知道这是一个PHP问题,但我希望这段代码能有所帮助。