Sequelize:在日期中添加一天不起作用

问题描述 投票:0回答:3

我的表

updatedAt
中有一个列
User
,属于
Date
类型,它存储日期和时间。我想仅使用日期而不是日期时间进行查询。我正在使用sequelize
Sequelize.Op.gt
Sequelize.Op.lt
运算符来通过添加
Users
来在该确切日期更新
24 * 60 * 60 * 1000
,无论时间如何。但日期不会增加一天。当我尝试减法时,它工作得完美无缺。我只能在使用 getTime() 方法后添加一天。

我很困惑为什么它在不使用

getTime()
的情况下进行减法时有效,但在加法时不起作用。谁能解释一下吗?

TL;博士

这个有效:

[Sequelize.Op.gt]: new Date(new Date(updatedAt) - 24 * 60 * 60 * 1000)
//updateAt: 2018-11-27
//output: 2018-11-26

不起作用

[Sequelize.Op.gt]: new Date(new Date(updatedAt) + 24 * 60 * 60 * 1000)
//updateAt: 2018-11-27
//output: 2018-11-27

有效:

[Sequelize.Op.lt]: new Date(new Date(updatedAt).getTime() + 24 * 60 * 60 * 1000)
//updateAt: 2018-11-27
//output: 2018-11-28
node.js sequelize.js graphql sequelize-cli
3个回答
5
投票
sequelize.fn("DATEADD", sequelize.literal("DAY"), 4, sequelize.col('Your Date')) // 4 number of days adding

如果想查找包括此添加日期与当前日期的差异

sequelize.fn('DATEDIFF', sequelize.literal("DAY"), sequelize.fn("DATEADD", sequelize.literal("DAY"), 4, sequelize.col('Your Date')), sequelize.fn("GETDATE")

2
投票

让我们一步步看看你的第二个案例
1.

new Date(new Date(updatedAt) + 24 * 60 * 60 * 1000)

2.
new Date(new Date(updatedAt) + 86400000)

3.
new Date('Tue Nov 27 2018 17:34:48 GMT+0800 (Some Region)86400000')

和日期解析器忽略了输入中字符串的“86400000”部分。
4.
new Date('Tue Nov 27 2018 17:34:48 GMT+0800 (Some Region)')

现在您的输入没有被修改。 JavaScript 不知道你是在进行字符串加法还是数字加法。这就是你的困惑点。在其他情况下,整数加法和减法运算符正确完成


0
投票

事情不必这么复杂。以下内容将为给定日期添加一天:

const mydate = new Date("2024-01-01") 
const computedDate = +new Date(mydate) + 24*60*60*1000;
console.log(mydate, new Date(computedDate));

神奇之处在于在构造 Date 对象时在“new Date()”之前使用“+”。这将返回毫秒数。只需添加一天的毫秒数即可将日期提前至 1 天。

© www.soinside.com 2019 - 2024. All rights reserved.