zzxworld

MySQL 时间戳转日期的函数操作

在一些软件项目中,经常看到一些用后端代码转换日期再传给 MySQL 的操作,其实大可不必。MySQL 本身就提供了完善的时间戳和日期之间的互转函数,本文总结了这些函数的用法。

日期转时间戳

在开始用 MySQL 把时间戳转换为日期之前,我想先提一下如何用 MySQL 把日期转换为时间戳。原因是我手头没有要转换的时间戳。:P

MySQL 把时间转换为时间戳的函数是 unix_timestamp,默认不提供任何参数会把当前时间转换为时间戳:

mysql> SELECT unix_timestamp();
+------------------+
| unix_timestamp() |
+------------------+
|       1666344801 |
+------------------+

如果想要把指定时间转换为时间戳,可以在调用时提供日期加时间的字符串格式参数:

mysql> SELECT unix_timestamp('2022-10-21 00:00:00');
+---------------------------------------+
| unix_timestamp('2022-10-21 00:00:00') |
+---------------------------------------+
|                            1666310400 |
+---------------------------------------+

时间戳转日期

上面我得到了一个时间戳:1666344801,那么如何把它转为年月日加时间的字符串格式?答案是使用 MySQL 的 from_unixtime 函数:

mysql> SELECT from_unixtime(1666344801);
+---------------------------+
| from_unixtime(1666344801) |
+---------------------------+
| 2022-10-21 09:33:21       |
+---------------------------+

from_unixtime 除了时间戳参数,还有第二个时间格式参数,可以定义转换日期的返回格式,比如只需要年月日就可以这样来调用:

mysql> SELECT from_unixtime(1666344801, '%Y-%m-%d');
+---------------------------------------+
| from_unixtime(1666344801, '%Y-%m-%d') |
+---------------------------------------+
| 2022-10-21                            |
+---------------------------------------+

%Y%m%d 这三个是 MySQL 的日期格式占位字符,分别代表了四位数字的年份和两位数字的月份以及日期。还有很多个这样的类似符号,详情可以参考下面的日期格式化符号列表。

日期格式化符号列表

符号 说明 示例
%Y 四位数字表示的年份 2015, 2016...
%y 两位数字表示的年份 15, 16...
%M 英文月名 January, February, ..., December
%b 英文缩写月名 Jan, Feb, ..., Dec
%m 两位数字表示月份 01, 02, ..., 12
%c 数字表示月份 1, 2, ..., 12
%d 两位数字表示的日期,不足两位的前面用 0 补充 01, 02, ..., 31
%e 数字表示的日期 1, 2, ..., 31
%D 英文格式的日期 1st, 2nd, 3rd ...
%U 数字表示周数 星期天为一周的第一天
%u 数字表示周数 星期一为一周的第一天
%W 周几全称 Sunday, Monday, ..., Saturday
%a 周几缩写 Sun, Mon, ..., Sat
%w 以数字形式标识周 0=Sunday, 1=Monday, ..., 6=Saturday
%j 按年表示的天数 001, 002, ..., 366
%H 24小时制,两位数形式小时 00, 01, ..., 23
%h 12小时制,两位数形式小时 00, 01, ..., 12
%k 24小时制,数形式小时 0, 1, ..., 23
%l 12小时制,数形式小时 0, 1, ..., 12
%I, %i 两位数字形式的分 00, 01, ..., 59
%T 24小时制,时间形式 HH:mm:ss
%r 12小时制,时间形式 hh:mm:ss AM 或 PM
%p 上午下午 AM, PM
%S, %s 两位数字形式的秒 00, 01, ..., 59