- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Godaddy 的 MySQL 数据库。由于他们的时区是 MST UTC -7,我需要修改我的代码。我想出了如何在使用 NOW() 函数时做到这一点。但是,我在将 CURDATE() 的结果转换为本地日期时遇到了困难。网站上的主题没有帮助。我没有权限更改 mysql 的时区,因为它是共享主机。关于 CURDATE() 的问题是,由于服务器和我的国家之间存在 10 小时的差异,因此日期在某些时候会有所不同。
到目前为止我尝试了什么
第一次尝试
SELECT convert_tz(CURDATE(),'-07:00','+03:00')
此查询在 mysql 中返回以下输出。
convert_tz(CURDATE(),'-07:00','+03:00')
2016-05-14 10:00:00
我还没有尝试,因为日期仍然相同,但这段代码可能完成了工作。但问题是关于日期之后的时间。CURDATE 应该只返回日期。我认为它返回等于 10 小时的两个时区之间的差异,但我认为当我比较 2 个日期时它会导致问题。
第二次尝试
SELECT convert_tz(CURDATE(),'MST','EEST');
由于服务器的时区是 MST 而我的时区是 EEST,我尝试了这种方式但它返回 NULL。
问题是我应该怎么做才能返回没有 10:00:00 的日期。还是有更好的方法?
最佳答案
您的方法存在一些问题。
首先,CURDATE()
返回一个日期,而不是日期时间。
其次,在截断时间部分之前,您需要将当前日期和时间从服务器时区转换为您的时区。这意味着在内部使用 NOW()
,而不是 CURDATE()
。
第三,您需要为转换的双方在全年使用正确的时区缩写。如果任一时区无法识别,CONVERT_TZ()
将返回 NULL
。
在这种情况下,MST/MDT 在 MySQL 时区表中称为“MST7MDT”,EET/EEST 称为“EET”。令人惊讶的是,Go Daddy 没有将他们的服务器时钟设置为 UTC——这是服务器时钟的一种事实上的标准,但假设不是,“MST7MDT”可能是最正确的值。
mysql> SELECT DATE(CONVERT_TZ(NOW(),'MST7MDT','EET'));
+-----------------------------------------+
| DATE(CONVERT_TZ(NOW(),'MST7MDT','EET')) |
+-----------------------------------------+
| 2016-05-14 |
+-----------------------------------------+
1 row in set (0.00 sec)
或者,您可以使用更直观的时区本地化名称。我相信这些值也是正确的,并且可以正确适应夏季和时间的变化:
mysql> SELECT DATE(CONVERT_TZ(NOW(),'America/Denver','Europe/Bucharest'));
+-------------------------------------------------------------+
| DATE(CONVERT_TZ(NOW(),'America/Denver','Europe/Bucharest')) |
+-------------------------------------------------------------+
| 2016-05-14 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
关于php - 使用 MySQL 将 CURDATE() 转换为我的本地日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228942/
如何使我的查询工作? 我想从 SQL 中获取未列出今天日期的数据。 这是我的查询: String sql = "select Room, Name, Age, EmailAddress, Phone,
我正在尝试保留数据库标志 30dexpf = 1 直到项目的到期日期等于或介于接下来的 7 天和 30 天之间这是我的数据库表 30dexpf | expiry --------|-------- 0
我编写了一个查询来计算客户的 PPPOE 中断次数。它在这种情况下工作得很好——在输出文件中我可以看到客户的名字以及他的 PPPOE 连接断开的次数: select username,
这个问题已经有答案了: SQL statement is ignoring where parameter (1 个回答) 已关闭 7 年前。 我有一个正在为客户构建的网站,用户可以在其中搜索优惠券,
我不明白为什么当我使用 CURDATE() 更新数据库时它总是将其设置为明天的日期。 服务器时间是:2012 年 MDT 9 月 10 日星期一 16:53:47 更新如下:更新 map 集大小=50
我想比较两个结果一个存储在第一个查询中,另一个与第一个查询完全相同,但我只想接收数据 9 ORDER BY moy DESC LIMIT 0,15"; 这是正确的吗?谢谢 最佳
我尝试创建一个表,其中“dateFrom”和“dateTo”字段需要高于今天的日期。所以我像这样使用 CHECK CREATE TABLE Booking ( hotelNo int(1
不确定为什么这个查询不会返回并获取当月之前的记录。上个月它运行良好,然后今天命中,6 月 1 日,它不会检索上个月的记录。 过去 7 天 SELECT SUM(sum) AS sum FROM cl_
我有一个惊人的观察 - 谁能解释一下? mysql> explain select * from game_instance where start_datetime between STR_TO_D
我正在尝试执行以下操作: statement.executeUpdate("INSERT INTO PlayerList (nickname, uuid, firstjoined) VALUES ('
我有一个 INSERT 语句, $stmt = $mysqli->prepare("INSERT INTO numbertable (numbers, numdate, salesperson, co
我有下表: CREATE TABLE Trans ( tranID int NOT NULL AUTO_INCREMENT, tranDate datetime NOT NULL DE
我正在执行一个选择查询,但在使用以下逻辑时遇到错误: and (dre.completion_date >= (curdate() - 1) and dre.completion_date = ("2
我有一些关于 mysql_query 的问题 INSERT INTO table VALUES ('', CURDATE()-1) 为什么昨天是这个月的最后一天 CURDATE()-1 结果类似于 2
大家 我想添加一列 start_date,其默认值为当前日期(),所以我使用以下命令: 改变表验证添加列 start_date 日期默认 CURDATE() 但它没有用,并告诉我它有语法错误。 虽然使
拜托,我不明白为什么这个命令返回 00 April。 今天是 2015 年 4 月 1 日,执行: mysql> SELECT CURDATE() -1; 它返回: | 20150400 | +---
MySQL CURDATE功能介绍 如果在数字上下文中使用字符串上下文或YYYMMDD格式,CURDATE()函数将以“YYYY-MM-DD”格式的值返回当前日期。 以下示例显示了如何在字符串上
为什么调出CURDATE会出错? UPDATE TABLENAME SET DATEATR= (TO_DATE(CURDATE() ,'DD-MM-YYYY') - WORKDATE /365
我正在尝试获取当天减去五天的值,但我想要特殊格式的结果(不是 MySQL 格式): SELECT DATE_FORMAT(DATE_SUB( DATE_FORMAT( CURDATE( ) , '%
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。请参阅SSCCE.o
我是一名优秀的程序员,十分优秀!