要将13位毫秒级时间戳转换为可读日期,必须先将其除以1000转换为秒级时间戳,再使用from_unixtime函数处理,例如select from_unixtime(your_timestamp_ms / 1000)可得到标准日期格式,结合date_format可自定义输出样式,如仅显示日期或中文格式,而处理时区问题则需使用convert_tz函数明确指定源时区和目标时区,确保时间显示准确无误。

很多时候,我们从前端或者其他系统拿到一个时间戳,发现它不是常见的10位,而是13位。这通常意味着它是一个毫秒级的时间戳。在MySQL里,如果我们想把它变成我们能看懂的日期格式,核心思路就是把它除以1000,变成秒级时间戳,再用
FROM_UNIXTIME
要将MySQL中存储的13位毫秒级时间戳转换为可读日期,你可以直接使用
FROM_UNIXTIME
例如,如果你的13位时间戳存储在名为
your_timestamp_ms
SELECT
FROM_UNIXTIME(your_timestamp_ms / 1000) AS readable_datetime,
DATE_FORMAT(FROM_UNIXTIME(your_timestamp_ms / 1000), '%Y-%m-%d %H:%i:%s') AS formatted_datetime,
DATE_FORMAT(FROM_UNIXTIME(your_timestamp_ms / 1000), '%Y年%m月%d日') AS chinese_date
FROM
your_table_name;这里,
FROM_UNIXTIME(your_timestamp_ms / 1000)
DATE_FORMAT
CONVERT_TZ
说起来,13位时间戳的出现,主要是为了追求更高的精度。我们平时最常接触的10位时间戳,通常是Unix时间戳,它记录的是从1970年1月1日00:00:00 UTC到现在的秒数。但在很多现代应用场景,尤其是涉及到实时数据、毫秒级事件记录或者高并发系统时,秒的精度就不够用了。比如JavaScript的
Date.now()
System.currentTimeMillis()
在我看来,这种设计虽然提供了更高精度,但同时也带来了一些小麻烦。最常见的坑就是,很多人不假思索地把13位时间戳直接扔给
FROM_UNIXTIME
当我们将13位时间戳成功转换为MySQL可识别的日期时间类型后,下一步通常是根据业务需求将其显示为不同的格式。这时,
DATE_FORMAT()
举个例子,假设我们已经通过
FROM_UNIXTIME(your_timestamp_ms / 1000)
如果你只想显示日期部分,比如“2023-10-26”:
SELECT DATE_FORMAT(FROM_UNIXTIME(your_timestamp_ms / 1000), '%Y-%m-%d') AS only_date FROM your_table_name;
如果你想显示具体的时分秒,比如“14:35:01”:
SELECT DATE_FORMAT(FROM_UNIXTIME(your_timestamp_ms / 1000), '%H:%i:%s') AS only_time FROM your_table_name;
或者,你想显示一个更具中文习惯的格式,比如“2023年10月26日 星期四 14点35分01秒”:
SELECT DATE_FORMAT(FROM_UNIXTIME(your_timestamp_ms / 1000), '%Y年%m月%d日 %W %H点%i分%s秒') AS custom_chinese_format FROM your_table_name;
这里
%Y
%m
%d
%H
%i
%s
%W
DATE_FORMAT()
时区问题,嗯,这是个老生常谈但又特别容易踩坑的地方。特别是当你处理来自不同系统或不同地理位置的时间数据时,时区就成了绕不开的话题。MySQL的
FROM_UNIXTIME()
FROM_UNIXTIME()
但问题来了,如果你的13位时间戳,比如是从一个海外服务器生成,或者你的应用逻辑期望的是UTC时间,而MySQL服务器又是本地时区,那结果就可能出现偏差。
要明确地处理时区,你可以使用
CONVERT_TZ()
CONVERT_TZ(dt, from_tz, to_tz)
dt
from_tz
to_tz
举个例子:
假设你的13位时间戳
your_timestamp_ms
SELECT
CONVERT_TZ(FROM_UNIXTIME(your_timestamp_ms / 1000), 'UTC', '+08:00') AS beijing_time,
CONVERT_TZ(FROM_UNIXTIME(your_timestamp_ms / 1000), 'UTC', 'America/New_York') AS new_york_time
FROM
your_table_name;这里的
'UTC'
'+08:00'
CONVERT_TZ()
'+08:00'
在我看来,处理时间戳和日期时,最稳妥的做法是:
FROM_UNIXTIME
这样,无论你的应用部署在哪里,或者用户来自何方,时间显示都能保持一致性和准确性,避免很多不必要的困扰。这是一个经验之谈,因为时区问题一旦处理不好,调试起来真的会让人头疼。
以上就是MySQL日期函数应用 13位时间戳转换为可读日期的技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号