mysql - 如何将 DATETIME 转换为 unix 时间戳(并正确处理负日期)?

标签 mysql

到目前为止我一直在使用这个功能

CREATE FUNCTION dt2ts (d DATETIME)
RETURNS BIGINT deterministic
RETURN TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(0), d);

但正如我just discovered如果您的日期没有与 1970-01-01 相同的偏移量,这将给出不正确的结果,即,如果您的日期采用夏令时,则结果不正确。

UNIX_TIMESTAMP() 不起作用,因为它无法处理 unix 纪元之前的日期。

那么如何为任何给定的日期时间获取正确的 unix 时间戳?

最佳答案

找到解决方案。

CREATE FUNCTION dt2ts (d DATETIME)
RETURNS BIGINT deterministic
RETURN TIMESTAMPDIFF(SECOND, '1970-01-01', convert_tz(d,@@session.time_zone,'UTC'));

您需要import timezones为了让它起作用。我不认为没有办法做到这一点。

关于mysql - 如何将 DATETIME 转换为 unix 时间戳(并正确处理负日期)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580589/

相关文章:

MySQL 多个表的外连接

php - PDO数据库类

php - 在产品预览 slider 上显示图像

javascript - HTML 表单不会创建新条目

mysql - Node.js 套接字 io 'Error:Client is not defined'

Python数据之间的区别

mysql - 根据点击的<td>打开新页面,该页面也来自JSP中的MySql

php - MySQL Wrapper 和获取行

php - Symfony2 + Doctrine INSERT 查询失败且没有错误

php - Mysqli 选择多个查询