我的应用程序将允许用户创建优惠券。
优惠券将在datefrom
和dateto
期间生效。
问题是每张优惠券应该在选定日期有效,而不是几小时。
例如,自星期一(2016-06-12)到星期二(2016-06-13),所以两天。我应该如何在服务器端存储日期,然后使用Mongoose中的$gte
子句进行比较?
谢谢: - )
答案 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_case
或camelCase
作为字段名称