PHP mySQL CURRENT_TIMESTAMP cPanel 数据库中显示的时间不正确

标签 php mysql

我住在斯里兰卡。我有这段代码来记录无效登录时的当前日期和时间。

$insert_query = "INSERT INTO LoginAttempt(IpAddress, LoginAt) VALUES('". $_SERVER['REMOTE_ADDR']. "', CURRENT_TIMESTAMP)";

我已上传到 Hostinger.co.uk,这是用于教育目的的免费网络托管服务。

成功插入表。它显示日期正确。但时间比实际时间少了约5小时30分钟。 有没有办法在 cPanel 中或以编程方式在 PHP 脚本中更改时区?

我尝试过的;

1) 添加此内容。但不起作用! date_default_timezone_set('亚洲/科伦坡');

使用DATE_ADD函数添加特定缺失时间的另一个解决方案。

您还有什么想法?谢谢

MySQL 表;

    CREATE TABLE LoginAttempt(
    LoginId INT NOT NULL AUTO_INCREMENT,
    IpAddress VARCHAR(20) NOT NULL,
    LoginAt DATETIME NOT NULL DEFAULT NOW(),
    PRIMARY KEY(LoginId)
);

有效的解决方案!!!

$insert_query = "INSERT INTO LoginAttempt(IpAddress, LoginAt) VALUES('". $_SERVER['REMOTE_ADDR']. "', CONVERT_TZ(NOW(), 'UTC', 'Asia/Colombo') )";

最佳答案

英格兰的这台服务器可能以 UTC 时间运行。斯里兰卡比 UTC 早 5:30,这并非巧合。您的服务器肯定会在您的表中记录正确的时间。它只是在错误的区域。

这些操作共享服务器的人不会仅仅为了您而改变这一点:您与来自世界各地的人们共享服务器。 (请注意,在任何地方都以 UTC 时间运行服务器被认为是一种良好的做法,因此,如果您的服务器位于大厅下方,您也会遇到同样的问题。)

LoginAt 列的数据类型从 DATETIME 更改为 TIMESTAMPTIMESTAMP 值始终以 UTC 格式记录,并在显示时始终转换为本地时间。

然后,每当您连接到 MySQL(从程序或在 PhpMyAdmin 中)时,发出

SET time_zone = 'Asia/Colombo'

在执行其他操作之前,您已经发现了命令。然后您将看到以本地时间显示的 TIMESTAMP 数据。

或者,如果您知道现有的 DATETIMEDATE 时间数据是根据 UTC 记录的,则可以 convert it in MySQL using CONVERT_TZ() 。例如,

   SELECT CONVERT_TZ(LoginAt, 'UTC', 'Asia/Colombo') LoginAt, ...

将在本地时间为您提供信息。

需要知道的是 TIMESTAMP 数据类型、NOW()CURDATE()CURRENT_TIMESTAMP使用时区设置检索等等。 DATETIMEDATE 不是。因此,您的程序获取 CURRENT_TIMESTAMP 隐式将其转换为 UTC 本地时间,并将其存储到您的 DATETIME 列中,从而将时间凝结为 UTC。

如果您的程序将其存储到 TIMESTAMP 列中,则存储时间的时区不会被卡住。或者,如果您的程序在问题中发出查询之前发出set time_zone = 'Asia/Colombo'命令,它会将时间凝结为您的本地时间,然后再存储进入您的 DATETIME 列。

令人困惑?是的。

关于PHP mySQL CURRENT_TIMESTAMP cPanel 数据库中显示的时间不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027782/

相关文章:

mysql - 选择 * 时增加的时间是什么原因?

php - 用户如何在其他人发帖后发帖?

mysql - 多个表的复合键 : do I need a separate query to check table type?

php - 在php中包含另一个类中的类

php, "thread safe"SQL操作

javascript - mysql 数据库日期时间格式的 JQuery 日期和时间

php - 时间戳差异和输出

mysql - 如何对 varchar 数字列进行排序?

php - 使用 Php 和 Mysql 插入数据时出错

PHP:序列化对象并将它们粘贴到数据库中以备后用是不是糟糕的设计?