猫鼬日期比较

时间:2016-06-01 14:35:48

标签: node.js mongodb

我的应用程序将允许用户创建优惠券。

优惠券将在datefromdateto期间生效。

问题是每张优惠券应该在选定日期有效,而不是几小时。

例如,自星期一(2016-06-12)到星期二(2016-06-13),所以两天。

我应该如何在服务器端存储日期,然后使用Mongoose中的$gte子句进行比较?

谢谢: - )

3 个答案:

答案 0 :(得分:2)

您可以将到期时间存储为UNIX时间戳。在您的Mongoose模型中,您可以使用expiration : { type: Number, required: true}

如果您有用于创建优惠券的用户界面,那么您可以配置日期选择器以在UNIX时间戳中发送时间。

或者如果您获得日期字符串,则可以使用var timestamp = new Date('Your_Date_String');

要计算天数,您可以使用Moment JS。使用此功能,您可以使用.startOf();计算日期的开始日期,并使用.endOf();

计算结束日期

Moment JS的时间戳返回可用于Mongoose查询,例如$gte : some_timestamp$lte : some_timestamp

答案 1 :(得分:2)

{ "_id" : 1, "couponStartDate" : ISODate("2016-06-26T18:57:30.012Z") }
{ "_id" : 2, "couponStartDate" : ISODate("2016-06-26T18:57:35.012Z") }


var startDate = new Date(); // I am assuming this is gonna be provided 
var validDate = startDate;
var parametricDayCount = 2;
validDate.setDate(validDate.getDate()+parametricDayCount);
CouponModel.find({couponStartDate: {$gte: startDate, $lte: validDate}}, function (err, docs) { ... });

答案 2 :(得分:1)

如果您希望在优惠券保留之前validate,则可以为日期字段创建max / min值:

请参阅官方mongoose documentation on DATE validation的此示例:

var s = new Schema({ dateto: { type: Date, max: Date('2014-01-01') })
var M = db.model('M', s)
var m = new M({ dateto: Date('2014-12-08') })
m.save(function (err) {
  console.error(err) // validator error
  m.dateto = Date('2013-12-31');
  m.save() // success
})

提示:使用snake_casecamelCase作为字段名称