0

在 MySQL 中有一个带有 2 个时间戳字段的简单表:

*"...

creation timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_edit timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

..."*

当我尝试用一​​个简单的查询获取时:

SELECT * FROM customers

从我的 Node.js (mysqljs),json 返回:

creation: {}, // 空对象

last_edit: {} // 空对象

我怎样才能得到日期???

预先感谢!:)

4

2 回答 2

1

我猜这是一个 JDBC 问题,因为我看到了类似的行为。

在我的情况下,该列被定义为

`last_edit` datetime DEFAULT NULL

JDBCgetTimestamp()方法(如正确的 getter 所建议的那样)正在返回{}.

我发现使用该getObject()方法以 ISO 字符串格式返回了预期的 DATETIME 值(对于我的用例来说已经足够好了)。

刚刚注意到您说您正在使用“mysqljs”,因此不确定此修复是否与您的情况相关,因为 JDBC 部分已被抽象掉......

更新:由于某种原因getObject(),返回的时间比数据库中显示的时间 (UTC) 多 7 小时。

检查的输出getTimestamp()表明它是一个带有 getter 和 setter 的对象(在 'stringify-cation' 之后不存在)并编写了一个快速转换器。

function convert_ts_(ts) {
    var date = (ts.getYear() + 1900) + '-' + ((ts.getMonth() + 1) > 9 ? ts.getMonth() + 1 : '0' + (ts.getMonth() + 1)) + '-' + (ts.getDate() > 9 ? ts.getDate() : '0' + ts.getDate());
    var time = (ts.getHours() > 9 ? ts.getHours() : '0' + ts.getHours()) + ':' + (ts.getMinutes() > 9 ? ts.getMinutes() : '0') + ":" + (ts.getSeconds() > 9 ? ts.getSeconds() : '0' + ts.getSeconds());
    return date + 'T' + time;
}

这将返回带有零填充的“ YYYY-MM-DDT ”格式的日期HH:MM:SS

于 2021-03-26T12:37:02.753 回答
0

您需要在表中插入至少一条记录,以便从针对它的查询中返回任何结果。

如果您出于某种原因只想从数据库中检索当前日期,您可以执行以下操作:

SELECT CURRENT_TIMESTAMP

或者

SELECT NOW()
于 2020-07-13T16:30:00.493 回答