MySQL获取当前日期时间应选对函数:NOW()和CURRENT_TIMESTAMP()返回DATETIME,CURDATE()和CURTIME()分别返回日期和时间;日期加减须用DATE_ADD()/DATE_SUB();字符串转日期用STR_TO_DATE()并严格匹配格式;比较DATETIME字段需避免隐式转换。

MySQL 里怎么获取当前日期和时间
MySQL 提供多个函数返回当前时刻,但行为不同,选错会出逻辑 bug。NOW() 和 CURRENT_TIMESTAMP() 是等价的,返回带时分秒的 DATETIME 值(如 '2024-05-12 14:23:05');CURDATE() 只返回日期部分('2024-05-12'),CURTIME() 只返回时间部分('14:23:05')。
- 如果字段是
DATE类型,用CURDATE()更安全,避免隐式类型转换 -
NOW()在一个语句内多次调用,返回的是同一时间戳(事务内一致),不是实时刷新 - 注意时区:默认用系统时区,可通过
SELECT @@time_zone;查看,也可临时设为'+08:00'
日期加减怎么写才不出错
MySQL 不支持直接用 + 或 - 对日期做算术运算(比如 date_col + 1 会变成数字加法)。必须用 DATE_ADD() 或 DATE_SUB(),或其简写形式 ADDDATE()/SUBDATE()。
- 正确写法:
DATE_ADD(NOW(), INTERVAL 7 DAY)、DATE_SUB(order_time, INTERVAL 3 HOUR) - 单位要写全小写:
DAY、MONTH、YEAR、HOUR、MINUTE,不能写成days或day(单数复数都错) - 对
DATE字段加INTERVAL 1 MONTH可能跳到不存在的日期(如'2024-01-31' + 1 MONTH→'2024-02-31'→ 自动转为'2024-03-02'),业务敏感场景需额外校验
如何把字符串转成日期再比较
从日志或前端传入的日期常是字符串(如 '2024/05/12' 或 '12-May-2024'),直接跟 DATE 字段比会走字符比较,结果不可靠。必须用 STR_TO_DATE() 显式转换。
10分钟内自己学会PHP其中,第1篇为入门篇,主要包括了解PHP、PHP开发环境搭建、PHP开发基础、PHP流程控制语句、函数、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、日期和时间等内容;第2篇为提高篇,主要包括MySQL数据库设计、PHP操作MySQL数据库、Cookie和Session、图形图像处理技术、文件和目录处理技术、面向对象、PDO数据库抽象层、程序调试与错误处理、A
- 格式符必须严格匹配输入:`
STR_TO_DATE('2024/05/12', '%Y/%m/%d')` ✅,`STR_TO_DATE('2024/05/12', '%Y-%m-%d')` ❌(斜杠不等于短横) - 常见格式符:
%Y四位年,%y两位年,%m01–12,%c1–12(无前导零),%d01–31,%e1–31 - 转换失败返回
NULL,建议配合IS NOT NULL过滤,否则WHERE条件可能漏数据
为什么 WHERE date_col = '2024-05-12' 查不到数据
这是最常见的时间陷阱:当 date_col 是 DATETIME 或 TIMESTAMP 类型时,'2024-05-12' 会被 MySQL 隐式转成 '2024-05-12 00:00:00',只能匹配该秒的数据,几乎必然为空。
SELECT * FROM orders WHERE order_time >= '2024-05-12' AND order_time < '2024-05-13';
- 永远优先用范围查询代替等值查询处理日期范围
- 别依赖
DATE(order_time) = '2024-05-12',它会让索引失效(全表扫描) - 如果字段是
DATE类型且确定无时间部分,等值查询才安全
时区、隐式转换、索引失效这三块最容易在线上出问题,改之前最好先 EXPLAIN 看执行计划。









