Ext.define('Ext.calendar.util.Date', {
singleton: true,
diffDays: function(start, end) {
var day = 1000 * 60 * 60 * 24,
clear = Ext.Date.clearTime,
diff = clear(end, true).getTime() - clear(start, true).getTime();
return Math.ceil(diff / day);
},
copyTime: function(fromDt, toDt) {
var dt = Ext.Date.clone(toDt);
dt.setHours(
fromDt.getHours(),
fromDt.getMinutes(),
fromDt.getSeconds(),
fromDt.getMilliseconds());
return dt;
},
compare: function(dt1, dt2, precise) {
if (precise !== true) {
dt1 = Ext.Date.clone(dt1);
dt1.setMilliseconds(0);
dt2 = Ext.Date.clone(dt2);
dt2.setMilliseconds(0);
}
return dt2.getTime() - dt1.getTime();
},
maxOrMin: function(max) {
var dt = (max ? 0: Number.MAX_VALUE),
i = 0,
args = arguments[1],
ln = args.length;
for (; i < ln; i++) {
dt = Math[max ? 'max': 'min'](dt, args[i].getTime());
}
return new Date(dt);
},
max: function() {
return this.maxOrMin.apply(this, [true, arguments]);
},
min: function() {
return this.maxOrMin.apply(this, [false, arguments]);
},
today: function() {
return Ext.Date.clearTime(new Date());
},
add : function(dt, o) {
if (!o) {
return dt;
}
var ExtDate = Ext.Date,
dateAdd = ExtDate.add,
newDt = ExtDate.clone(dt);
if (o.years) {
newDt = dateAdd(newDt, ExtDate.YEAR, o.years);
}
if (o.months) {
newDt = dateAdd(newDt, ExtDate.MONTH, o.months);
}
if (o.weeks) {
o.days = (o.days || 0) + (o.weeks * 7);
}
if (o.days) {
newDt = dateAdd(newDt, ExtDate.DAY, o.days);
}
if (o.hours) {
newDt = dateAdd(newDt, ExtDate.HOUR, o.hours);
}
if (o.minutes) {
newDt = dateAdd(newDt, ExtDate.MINUTE, o.minutes);
}
if (o.seconds) {
newDt = dateAdd(newDt, ExtDate.SECOND, o.seconds);
}
if (o.millis) {
newDt = dateAdd(newDt, ExtDate.MILLI, o.millis);
}
return o.clearTime ? ExtDate.clearTime(newDt) : newDt;
}
});