- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 MySQL 表,这个表有一个名为 datetime_utc
的 DATETIME
列。如您所料,它是 UTC 日期和时间。在我的 Bookshelf 模型中,我定义了一个虚拟 getter,它使用 Moment.js 将其转换为 ISO 8601 字符串格式。我的模型看起来像这样:
bookshelf.plugin('virtuals');
exports.MyModel = bookshelf.Model.extend({
tableName : 'my_table',
idAttribute : 'id',
virtuals : {
datetime_iso : {
get : function () {
return moment.utc(this.get('datetime_utc')).format();
}
}
}
});
问题是,当 Bookshelf(或为其提供支持的底层 Knex)看到 DATETIME
列时,它会将值包装在 new Date(...)
之前把它给我的代码。由于日期值采用 UTC,但 Date 构造函数假定该值位于服务器的本地非 UTC 时区,因此我最终得到一个 Date 对象,该对象在错误的时区具有正确的日期。一旦 Moment 在该日期开始工作,所有值都会相差固定的小时数。
我通过查找 Date 对象并将日期组件直接分解到 Moment 构造函数中来解决这个问题。但感觉很恶心:
get : function () {
var dt = this.get('datetime_utc');
if (dt instanceof Date) {
dt = [
dt.getFullYear(), dt.getMonth(), dt.getDate(),
dt.getHours(), dt.getMinutes(), dt.getSeconds()
];
}
return moment.utc(dt).format();
}
是否有更简洁的方法从 Bookshelf 获取未包装的 YYYY-MM-DD HH:MM:SS
字符串值,或者从 Date 中创建新 Moment 对象的速记时区被忽略/修改为 UTC?
最佳答案
事实证明,这不是由 Knex 或 Bookshelf 引起的,而是由底层的 node-mysql 库引起的。有一个名为 timezone
的连接属性将附加到每个 DATETIME
、DATE
、TIMESTAMP
和 NEWDATE
在解析为 Date 对象之前的值。
Knex 将在初始化时将此属性传递给 node-mysql:
require('knex')({
"client": "mysql",
"connection": {
"host": "...",
"user": "...",
"password": "...",
"database": "...",
"timezone": "UTC" <-- This is the culprit
}
});
关于javascript - Bookshelf.js/Knex.js 太 "helpful"与 UTC DATETIME 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045691/
在我们的服务出现一些预期的增长之后,突然间一些更新花费了非常长的时间,这些过去非常快,直到表达到大约 2MM 记录,现在它们每个需要大约 40-60 秒。 update table1 set fiel
我在服务中实现了一个传感器事件监听器,只要采样周期和最大报告延迟低于 1 秒,该监听器就可以正常工作,但一旦我将采样周期增加到超过 1 秒,传感器就根本不会更新。 我希望采样周期为 10 秒(可能是
我使用 Tkinter GUI 来启动测量和分析过程,基本上只需单击一个按钮即可开始。由于这些测量可能需要一段时间,我尝试添加一个进度条,即这个: http://tkinter.unpythonic.
我正在尝试使用套接字发送数据包,但出现错误。 invalid conversion from ‘omnetpp::cPacket*’ to ‘inet::Packet*’ [-fpermissive]
我刚刚发现 String#split 有以下奇怪的行为: "a\tb c\nd".split => ["a", "b", "c", "d"] "a\tb c\nd".split(' ') => ["a
您好,我正在尝试 ClojureScript,我正在使用 Klipse作为我的 REPL 差不多。这可能不是它的预期用途,但因为我没有做任何太复杂的事情,所以现在没问题。 我遇到的一个问题是尝试设置计
根据下面的数据,ClockKit 会生成一次 future 的 CLKComplicationTimelineEntry 项,但对于过去的时间点,会进行 24 次调用!这是为什么? 更多详情: 我注意
我有一个 MySQL 表,这个表有一个名为 datetime_utc 的 DATETIME 列。如您所料,它是 UTC 日期和时间。在我的 Bookshelf 模型中,我定义了一个虚拟 getter,
大家好,我是二哥呀! 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源
我是一名优秀的程序员,十分优秀!