Mongoose日期字段 - 将默认值设置为date.now + N天

38

在 mongoose schema 中,例如:

var EventSchema = new Schema({
 title: {
  type: String,
  default: '',
  trim: true,
  required: 'Title cannot be blank'
 },
 description: {
  type: String,
  default: '',
  trim: true
 },
 start: {
  type: Date,
  default: Date.now,
  required: 'Must have start date - default value is the created date'
 },
 end: {
  type: Date,
  default: Date.now + 7 Days, // Date in one week from now
  required: 'Must have end date - default value is the created date + 1 week'
 },
 tasks: [{
  type: Schema.ObjectId,
  ref: 'Task'
 }]
});

在"结束"字段的行上,默认日期应设置为+7天。我可以添加预保存挂钩并在那里设置它,但想知道是否有一种方法可以在线设置默认字段。

2个回答

66
default: () => Date.now() + 7*24*60*60*1000

这就足够了


从我的角度来看,这个日期函数在我的情况下返回了错误的日期...日期比今天晚了一周。所以我通过只使用() => Date.now()重构了代码。 - AWE FRANCIS OLAWUMI

40

您可以按照以下方式将7天转换为毫秒并添加到当前日期中:

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

或者甚至是这样

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

更新

请查看下面@laggingreflex的评论。您需要将函数设置为默认值:

default: () => new Date(+new Date() + 7*24*60*60*1000)

1
太棒了!完美运行。 - HdN8
64
这将导致与运行应用程序时计算的日期相同(+ndays)。也就是说,如果您的应用程序运行时间超过n天,则会设置过去的日期!为了纠正这个问题,它应该被包装在一个函数default: function(){return +new Date() + 7*24*60*60*1000}中。 - laggingreflex
5
为什么在 new Date() 前面要加上 + 符号? - Gurbakhshish Singh
@ Gurbakhshish Singh + 转换为数字而不是日期对象,我认为。 - jack blank
6
这段代码 +new Date() 存在性能问题。我已经修改了我的回答,以避免让人们感到困惑。每次调用此代码都会创建一个新的日期实例,这会对垃圾收集器造成额外的压力。为了避免这种情况,请使用 Date.now().now() 方法是 Data 类的静态方法,它只返回数字值。因此,垃圾回收不必清理已创建的 Date 实例。希望这可以帮到你,祝好。 - Akhmedzianov Danilian
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接