Add start value to PYSON Date and DateTime
This enable the customization of the starting point for delta operations. issue8561 review264041002
This commit is contained in:
+36
-10
@@ -658,7 +658,8 @@
|
||||
delta_days);
|
||||
};
|
||||
Sao.PYSON.Date = Sao.class_(Sao.PYSON.PYSON, {
|
||||
init: function(year, month, day, delta_years, delta_months, delta_days)
|
||||
init: function(
|
||||
year, month, day, delta_years, delta_months, delta_days, start)
|
||||
{
|
||||
Sao.PYSON.Date._super.init.call(this);
|
||||
if (year === undefined) year = null;
|
||||
@@ -681,6 +682,7 @@
|
||||
this._delta_years = delta_years;
|
||||
this._delta_months = delta_months;
|
||||
this._delta_days = delta_days;
|
||||
this._start = start || null;
|
||||
},
|
||||
pyson: function() {
|
||||
return {
|
||||
@@ -690,7 +692,8 @@
|
||||
'd': this._day,
|
||||
'dy': this._delta_years,
|
||||
'dM': this._delta_months,
|
||||
'dd': this._delta_days
|
||||
'dd': this._delta_days,
|
||||
'start': this._start,
|
||||
};
|
||||
},
|
||||
types: function() {
|
||||
@@ -710,19 +713,29 @@
|
||||
},
|
||||
__string_params__: function() {
|
||||
return [this._year, this._month, this._day, this._delta_years,
|
||||
this._delta_months, this._delta_days];
|
||||
this._delta_months, this._delta_days, this._start];
|
||||
}
|
||||
});
|
||||
|
||||
Sao.PYSON.Date.eval_ = function(value, context) {
|
||||
var date = Sao.Date(value.y, value.M && value.M - 1, value.d);
|
||||
var date = value.start;
|
||||
if (date && date.isDateTime) {
|
||||
date = Sao.Date(date.year(), date.month(), date.date());
|
||||
}
|
||||
if (!date || !date.isDate) {
|
||||
date = Sao.Date();
|
||||
}
|
||||
if (value.y) date.year(value.y);
|
||||
if (value.M) date.month(value.M - 1);
|
||||
if (value.d) date.date(value.d);
|
||||
if (value.dy) date.add(value.dy, 'y');
|
||||
if (value.dM) date.add(value.dM, 'M');
|
||||
if (value.dd) date.add(value.dd, 'd');
|
||||
return date;
|
||||
};
|
||||
Sao.PYSON.Date.init_from_object = function(obj) {
|
||||
return new Sao.PYSON.Date(obj.y, obj.M, obj.d, obj.dy, obj.dM, obj.dd);
|
||||
return new Sao.PYSON.Date(
|
||||
obj.y, obj.M, obj.d, obj.dy, obj.dM, obj.dd, obj.start);
|
||||
};
|
||||
|
||||
Sao.PYSON.eval.DateTime = function(year, month, day, hour, minute, second,
|
||||
@@ -735,9 +748,9 @@
|
||||
Sao.PYSON.DateTime = Sao.class_(Sao.PYSON.Date, {
|
||||
init: function(year, month, day, hour, minute, second, microsecond,
|
||||
delta_years, delta_months, delta_days, delta_hours,
|
||||
delta_minutes, delta_seconds, delta_microseconds) {
|
||||
delta_minutes, delta_seconds, delta_microseconds, start) {
|
||||
Sao.PYSON.DateTime._super.init.call(this, year, month, day,
|
||||
delta_years, delta_months, delta_days);
|
||||
delta_years, delta_months, delta_days, start);
|
||||
if (hour === undefined) hour = null;
|
||||
if (minute === undefined) minute = null;
|
||||
if (second === undefined) second = null;
|
||||
@@ -785,13 +798,26 @@
|
||||
this._hour, this._minute, this._second, this._microsecond,
|
||||
date_params[3], date_params[4], date_params[5],
|
||||
this._delta_hours, this._delta_minutes, this._delta_seconds,
|
||||
this._delta_microseconds];
|
||||
this._delta_microseconds, date_params[6]];
|
||||
}
|
||||
});
|
||||
|
||||
Sao.PYSON.DateTime.eval_ = function(value, context) {
|
||||
var date = Sao.DateTime(value.y, value.M && value.M - 1, value.d,
|
||||
value.h, value.m, value.s, value.ms && value.ms / 1000, true);
|
||||
var date = value.start;
|
||||
if (date && date.isDate) {
|
||||
date = Sao.DateTime.combine(date, Sao.Time());
|
||||
}
|
||||
if (!date || !date.isDateTime) {
|
||||
date = Sao.DateTime();
|
||||
date.utc();
|
||||
}
|
||||
if (value.y) date.year(value.y);
|
||||
if (value.M) date.month(value.M - 1);
|
||||
if (value.d) date.date(value.d);
|
||||
if (value.h !== null) date.hour(value.h);
|
||||
if (value.m !== null) date.minute(value.m);
|
||||
if (value.s !== null) date.second(value.s);
|
||||
if (value.ms !== null) date.milliseconds(value.ms / 1000);
|
||||
if (value.dy) date.add(value.dy, 'y');
|
||||
if (value.dM) date.add(value.dM, 'M');
|
||||
if (value.dd) date.add(value.dd, 'd');
|
||||
|
||||
+81
-2
@@ -48,8 +48,10 @@
|
||||
var date = Sao.Date(2002, 0, 1);
|
||||
var datetime = Sao.DateTime(2002, 0, 1, 12, 30, 0, 0);
|
||||
var pyson_date = new Sao.PYSON.Date(2002, 1, 1).pyson();
|
||||
pyson_date.start = null;
|
||||
var pyson_datetime = new Sao.PYSON.DateTime(
|
||||
2002, 1, 1, 12, 30, 0, 0).pyson();
|
||||
pyson_datetime.start = null;
|
||||
var array = ["create_date", '>=', date];
|
||||
var pyson_array = ["create_date", '>=', pyson_date];
|
||||
QUnit.strictEqual(encoder.encode(), 'null', "encode()");
|
||||
@@ -707,7 +709,42 @@
|
||||
|
||||
QUnit.strictEqual(
|
||||
new Sao.PYSON.Date(2010, 1, 12, -1, 12, -7).toString(),
|
||||
'Date(2010, 1, 12, -1, 12, -7)');
|
||||
'Date(2010, 1, 12, -1, 12, -7, null)');
|
||||
});
|
||||
|
||||
QUnit.test('PYSON Date start', function() {
|
||||
var eval_;
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.Date(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('date')));
|
||||
var date = Sao.Date(2000, 1, 1);
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'date': date}).decode(eval_).valueOf(), date.valueOf());
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.Date(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('datetime')));
|
||||
var datetime = Sao.DateTime(2000, 1, 1, 12, 0);
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'datetime': datetime}).decode(eval_).valueOf(),
|
||||
Sao.Date(2000, 1, 1).valueOf());
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.Date(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('foo')));
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'foo': 'bar'}).decode(eval_).valueOf(),
|
||||
Sao.Date().valueOf());
|
||||
});
|
||||
|
||||
QUnit.test('PYSON DateTime', function() {
|
||||
@@ -874,7 +911,49 @@
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.DateTime(2010, 1, 12, 10, 30, 20, 0,
|
||||
-1, 12, -7, 2, 15, 30, 1).toString(),
|
||||
'DateTime(2010, 1, 12, 10, 30, 20, 0, -1, 12, -7, 2, 15, 30, 1)');
|
||||
'DateTime(2010, 1, 12, 10, 30, 20, 0, -1, 12, -7, 2, 15, 30, 1, null)');
|
||||
});
|
||||
|
||||
QUnit.test('PYSON DateTime start', function() {
|
||||
var eval_;
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.DateTime(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('datetime')));
|
||||
var datetime = Sao.DateTime(2000, 1, 1, 12, 0);
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'datetime': datetime}).decode(eval_).valueOf(),
|
||||
datetime.valueOf());
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.DateTime(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('date')));
|
||||
var date = Sao.DateTime(2000, 1, 1);
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'date': date}).decode(eval_).valueOf(),
|
||||
Sao.DateTime(2000, 1, 1, 0, 0).valueOf());
|
||||
|
||||
eval_ = new Sao.PYSON.Encoder().encode(
|
||||
new Sao.PYSON.DateTime(
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
undefined, undefined, undefined,
|
||||
undefined, undefined, undefined, undefined,
|
||||
new Sao.PYSON.Eval('foo')));
|
||||
|
||||
QUnit.strictEqual(new Sao.PYSON.Decoder(
|
||||
{'foo': 'bar'}).decode(eval_).valueOf(),
|
||||
Sao.DateTime().valueOf());
|
||||
});
|
||||
|
||||
QUnit.test('PYSON TimeDelta', function() {
|
||||
|
||||
Reference in New Issue
Block a user