我有一个聊天程序,当用户发送聊天时,将在mySQL中创建一个自动时间戳。显示聊天记录后,我需要根据每个用户所在的时区来调整所有时间戳。
即。
加利福尼亚某人看到:
Bob: Hi (May 30 2019 10:00 AM)
Rob: Bye (May 30 2019 10:01 AM)
芝加哥某人看到:
Bob: Hi (May 30 2019 12:00 AM)
Rob: Bye (May 30 2019 12:01 AM)
意思是我无法将时间戳记入时区的数据库中,否则所有用户都会看到类似这样的内容:
(假设鲍勃在加利福尼亚,罗伯在芝加哥,并且消息的发送间隔为1分钟)
Bob: Hi (May 30 2019 10:00 AM)
Rob: Bye (May 30 2019 12:01 AM)
因此,当我提取日期/时间时,这是我使用的php代码:
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<label style = 'font-size:1.1vw';>".date('M j Y g:i A', strtotime($row['time']))."</label>"."<br>";
}
} else {
}
$conn->close();
PHP解决方案对我来说是最理想的选择,但我也愿意实现javascript或jQuery解决方案。
(PS-我不知道mySQL存储的是哪个时区,但是它不是我的当前时区...因此,偏离当前时区的时间偏移解决方案需要某种解决方法)。
答案 0 :(得分:0)
可能的解决方案here
在JavaScript中,您将执行以下操作:
var dateToConvert = new Date(<?= json_encode($row['time']) ?>);
console.log('full date is ', dateToConvert.toLocaleString());
console.log('just the date is ', dateToConvert.toLocaleDateString());
console.log('just the time is ', dateToConvert.toLocaleTimeString());
答案 1 :(得分:0)
大概每个用户的首选时区都存储在某个地方?然后,使用该值在数据库级别进行调整很简单。您没有提供任何示例代码,但是假设您有一个用户对象,其中存储了America/Los Angeles
作为其首选时区,则可以执行以下操作:
SELECT message_body, CONVERT_TZ(message_time, 'SYSTEM', ?) AS message_time FROM messages;
然后从PHP中传入当前用户的时区作为参数