mirror of https://gitee.com/bigwinds/arangodb
91 lines
1.8 KiB
JavaScript
Executable File
91 lines
1.8 KiB
JavaScript
Executable File
// Load modules
|
|
|
|
var Any = require('./any');
|
|
var Errors = require('./errors');
|
|
var Hoek = require('hoek');
|
|
|
|
|
|
// Declare internals
|
|
|
|
var internals = {};
|
|
|
|
|
|
internals.Date = function () {
|
|
|
|
Any.call(this);
|
|
this._type = 'date';
|
|
};
|
|
|
|
Hoek.inherits(internals.Date, Any);
|
|
|
|
|
|
internals.Date.prototype._base = function (value, state, options) {
|
|
|
|
var result = {
|
|
value: (options.convert && internals.toDate(value)) || value
|
|
};
|
|
|
|
result.errors = (result.value instanceof Date && !isNaN(result.value.getTime())) ? null : Errors.create('date.base', null, state, options);
|
|
return result;
|
|
};
|
|
|
|
|
|
internals.toDate = function (value) {
|
|
|
|
if (value instanceof Date) {
|
|
return value;
|
|
}
|
|
|
|
if (typeof value === 'string' ||
|
|
Hoek.isInteger(value)) {
|
|
|
|
if (typeof value === 'string' &&
|
|
/^\d+$/.test(value)) {
|
|
|
|
value = parseInt(value, 10);
|
|
}
|
|
|
|
var date = new Date(value);
|
|
if (!isNaN(date.getTime())) {
|
|
return date;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
|
|
internals.Date.prototype.min = function (date) {
|
|
|
|
date = internals.toDate(date);
|
|
Hoek.assert(date, 'Invalid date format');
|
|
|
|
return this._test('min', date, function (value, state, options) {
|
|
|
|
if (value.getTime() >= date.getTime()) {
|
|
return null;
|
|
}
|
|
|
|
return Errors.create('date.min', { limit: date }, state, options);
|
|
});
|
|
};
|
|
|
|
|
|
internals.Date.prototype.max = function (date) {
|
|
|
|
date = internals.toDate(date);
|
|
Hoek.assert(date, 'Invalid date format');
|
|
|
|
return this._test('max', date, function (value, state, options) {
|
|
|
|
if (value.getTime() <= date.getTime()) {
|
|
return null;
|
|
}
|
|
|
|
return Errors.create('date.max', { limit: date }, state, options);
|
|
});
|
|
};
|
|
|
|
|
|
module.exports = new internals.Date();
|