将13位毫秒时间戳转为标准日期需先除以1000转为秒级,再用FROM_UNIXTIME()函数转换;反向则用UNIX_TIMESTAMP()函数转为秒级时间戳后乘以1000,但会丢失毫秒精度。

MySQL中,要把一个13位的Unix时间戳(通常是毫秒级)转换成标准日期格式,最直接的方法是先将其除以1000,变成10位的秒级时间戳,再利用
FROM_UNIXTIME()
处理13位时间戳到标准日期,核心思路就是降维打击——把毫秒变成秒。MySQL的
FROM_UNIXTIME()
假设你有一个名为
timestamp_ms
SELECT
FROM_UNIXTIME(timestamp_ms / 1000) AS standard_datetime,
FROM_UNIXTIME(timestamp_ms / 1000, '%Y-%m-%d %H:%i:%s') AS formatted_datetime
FROM
your_table;这里,
FROM_UNIXTIME(timestamp_ms / 1000)
DATETIME
YYYY-MM-DD HH:MM:SS
'%Y-%m-%d %H:%i:%s'
DATE_FORMAT()
如果你的时间戳是字符串类型,记得先转换成数字,例如:
CAST(timestamp_ms AS DECIMAL(16, 3)) / 1000
这个问题其实挺有意思的,也反映了Unix时间戳的历史和标准。我们通常说的Unix时间戳,它在设计之初就是以秒为单位的,表示从1970年1月1日00:00:00 UTC到现在的秒数。这是因为在那个年代,计算机的存储和处理能力都相对有限,精确到秒已经足够满足大部分需求了。所以,像
FROM_UNIXTIME()
当你给它一个13位的数字时,它会把它当作一个非常大的秒数来处理,而不是毫秒。举个例子,如果你的13位时间戳是
1678886400000
FROM_UNIXTIME()
所以,这不是
FROM_UNIXTIME()
既然能把13位时间戳转成日期,反过来操作自然也是可以的。如果你想把一个MySQL中的
DATETIME
TIMESTAMP
UNIX_TIMESTAMP()
UNIX_TIMESTAMP()
SELECT
UNIX_TIMESTAMP(NOW()) * 1000 AS current_timestamp_ms,
UNIX_TIMESTAMP('2023-03-15 10:30:00') * 1000 AS specific_timestamp_ms,
UNIX_TIMESTAMP(your_datetime_column) * 1000 AS column_timestamp_ms
FROM
your_table;这里需要注意一个细节:
UNIX_TIMESTAMP()
'2023-03-15 10:30:00.123'
UNIX_TIMESTAMP()
DATETIME(3)
TIMESTAMP(3)
UNIX_TIMESTAMP()
在实际项目里,处理日期时间是个绕不开的话题,而且坑还不少。我个人觉得,有几个点是特别值得注意的:
DATETIME
TIMESTAMP
BIGINT
DATETIME
TIMESTAMP
DATETIME(3)
TIMESTAMP(3)
BIGINT
TIMESTAMP
DATETIME
STR_TO_DATE()
DATE_FORMAT()
UNIX_TIMESTAMP()
FROM_UNIXTIME()
WHERE FROM_UNIXTIME(timestamp_ms / 1000) > '2023-01-01'
'2023-01-01'
timestamp_ms / 1000
以上就是MySQL日期转换函数 13位时间戳转标准日期的代码示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号