javascript - 在 Mongoose 模式默认日期值中将月份添加到当前日期

标签 javascript node.js mongodb date mongoose

我们有一个像这样的 Mongoose 模式:

var sampleSchema = new Schema({
    fieldABC: String,
    expireAfter1Month:{
        type: Date,
        default: new Date() + 1 month
    }
});

expireAfter1Month 的默认值应设置为一个月后的日期值。

我有这些:

如何在 mongoose 模式的默认日期值中将月份添加到当前日期?

也许我可以这样做

default: +new Date() + 30*24*60*60*1000

但是,我想知道是否有更好/优化的方法?

最佳答案

基于对您发布的其中一个链接的回答

https://stackoverflow.com/a/30525690/5053002

var minuteFromNow = function(){
    var timeObject = new Date();
    timeObject.setTime(timeObject.getTime() + 1000 * 60);
    return timeObject;
};

new Schema({
    date: { type: Date, default: minuteFromNow }
})

例如,如果您希望从 1 月 29 日/30 日/31 日到 2 月 28 日(闰年当然是 29 日)的一个月,以及从 3 月 31 日、5 月、8 月或 10 月到 4 月 30 日的一个月,分别是六月、九月和十一月,那你需要多一点逻辑

有点像

function oneMonthFromNow() {
    var d = new Date();
    var targetMonth = d.getMonth() + 1;
    d.setMonth(targetMonth);
    if(d.getMonth() !== targetMonth % 12) {
        d.setDate(0); // last day of previous month
    }
    return d;
}
new Schema({
    date: { type: Date, default: oneMonthFromNow}
})

为了说明如何处理月末,下面是相同的代码,除了 d 是传入的任意日期,而不是使用 now - 来显示这将如何运作

function oneMonthFromNow(d) {
    var targetMonth = d.getMonth() + 1;
    d.setMonth(targetMonth);
    if(d.getMonth() !== targetMonth % 12) {
        d.setDate(0); // last day of previous month
    }
    return d;
}
console.log(oneMonthFromNow(new Date('2017-10-31T00:00:00Z'))); // 30 November
console.log(oneMonthFromNow(new Date('2017-11-30T00:00:00Z'))); // 30 December
console.log(oneMonthFromNow(new Date('2017-12-31T00:00:00Z'))); // 31 January
console.log(oneMonthFromNow(new Date('2018-01-31T00:00:00Z'))); // 28 February
console.log(oneMonthFromNow(new Date('2018-02-28T00:00:00Z'))); // 28 March

您的评论(在我发布此答案后添加:p)建议从 1 月 31 日开始的一个月应该是 3 月 2 日,即总是只添加 30 天,在这种情况下您自己的建议

new Schema({
    date: { type: Date, default: +new Date() + 30*24*60*60*1000}
})

会很理想

关于javascript - 在 Mongoose 模式默认日期值中将月份添加到当前日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907444/

相关文章:

node.js - 子模块不是 git 命令(在 Windows 的 GIT 上使用 NPM)

windows - 无法在 Windows 上将持久文件夹添加到 bitnami/mongodb

MongoDB - 使用 $polygon 或 $geometry 的 $geoWithin 查询给出不同的结果

javascript - Angular 4 和 typescript

javascript - LoginStatus 注销不会在母版页的一个特定页面中触发 javascript

javascript - CORS header 'Access-Control-Allow-Origin' 缺失,但它存在于 header 中

javascript - 获取整个 innerHTML(父+子)

javascript - Node .js | EnsureAdmin 中间件功能不起作用

node.js - Windows 10 中包的 NPM 全局安装导致 Windows 脚本宿主错误

mongodb - MongoDB 中的 ISO8601 日期字符串(索引和查询)