diff options
Diffstat (limited to 'addons/web')
4 files changed, 20 insertions, 12 deletions
diff --git a/addons/web/static/src/js/components/datepicker.js b/addons/web/static/src/js/components/datepicker.js index 6031c72fc69..a11d51b5021 100644 --- a/addons/web/static/src/js/components/datepicker.js +++ b/addons/web/static/src/js/components/datepicker.js @@ -180,7 +180,7 @@ odoo.define('web.DatePickerOwl', function (require) { }, locale: moment.locale(), maxDate: moment({ y: 9999, M: 11, d: 31 }), - minDate: moment({ y: 1 }), + minDate: moment({ y: 1000 }), useCurrent: false, widgetParent: 'body', }; diff --git a/addons/web/static/src/js/fields/field_utils.js b/addons/web/static/src/js/fields/field_utils.js index 4ffceb93408..0407da1b265 100644 --- a/addons/web/static/src/js/fields/field_utils.js +++ b/addons/web/static/src/js/fields/field_utils.js @@ -484,10 +484,12 @@ function parseDate(value, field, options) { if (date.year() === 0) { date.year(moment.utc().year()); } - date.toJSON = function () { - return this.clone().locale('en').format('YYYY-MM-DD'); - }; - return date; + if (date.year() >= 1000){ + date.toJSON = function () { + return this.clone().locale('en').format('YYYY-MM-DD'); + }; + return date; + } } throw new Error(_.str.sprintf(core._t("'%s' is not a correct date"), value)); } @@ -521,6 +523,7 @@ function parseDateTime(value, field, options) { datetime = smartDate; } else { if (options && options.isUTC) { + value = value.padStart(19, "0"); // server may send "932-10-10" for "0932-10-10" on some OS // phatomjs crash if we don't use this format datetime = moment.utc(value.replace(' ', 'T') + 'Z'); } else { @@ -534,10 +537,12 @@ function parseDateTime(value, field, options) { if (datetime.year() === 0) { datetime.year(moment.utc().year()); } - datetime.toJSON = function () { - return this.clone().locale('en').format('YYYY-MM-DD HH:mm:ss'); - }; - return datetime; + if (datetime.year() >= 1000) { + datetime.toJSON = function () { + return this.clone().locale('en').format('YYYY-MM-DD HH:mm:ss'); + }; + return datetime; + } } throw new Error(_.str.sprintf(core._t("'%s' is not a correct datetime"), value)); } diff --git a/addons/web/static/src/js/widgets/date_picker.js b/addons/web/static/src/js/widgets/date_picker.js index b989cc87355..fdbd1f7d891 100644 --- a/addons/web/static/src/js/widgets/date_picker.js +++ b/addons/web/static/src/js/widgets/date_picker.js @@ -30,7 +30,7 @@ var DateWidget = Widget.extend({ this.options = _.extend({ locale: moment.locale(), format : this.type_of_date === 'datetime' ? time.getLangDatetimeFormat() : time.getLangDateFormat(), - minDate: moment({ y: 1 }), + minDate: moment({ y: 1000 }), maxDate: moment({ y: 9999, M: 11, d: 31 }), useCurrent: false, icons: { diff --git a/addons/web/static/tests/fields/field_utils_tests.js b/addons/web/static/tests/fields/field_utils_tests.js index 567390e336d..08c5281752f 100644 --- a/addons/web/static/tests/fields/field_utils_tests.js +++ b/addons/web/static/tests/fields/field_utils_tests.js @@ -316,7 +316,7 @@ QUnit.test('parse percentage', function(assert) { }); QUnit.test('parse datetime', function (assert) { - assert.expect(6); + assert.expect(7); var originalParameters = _.clone(core._t.database.parameters); var originalLocale = moment.locale(); @@ -349,6 +349,9 @@ QUnit.test('parse datetime', function (assert) { assert.throws(function () { fieldUtils.parse.datetime("10000-01-01 12:00:00", {}, {}); }, /is not a correct/, "Dates after 9999 should be invalid"); + assert.throws(function () { + fieldUtils.parse.datetime("999-01-01 12:00:00", {}, {}); + }, /is not a correct/, "Dates before 1000 should be invalid"); dateStr = '01/13/2019 10:05:45'; date1 = fieldUtils.parse.datetime(dateStr); @@ -360,7 +363,7 @@ QUnit.test('parse datetime', function (assert) { date2 = moment.utc(dateStr, ['M/D/YYYY H:m:s'], true); assert.equal(date1.format(), date2.format(), "Date without leading 0"); - dateStr = '01/01/0001 10:15:45'; + dateStr = '01/01/1000 10:15:45'; date1 = fieldUtils.parse.datetime(dateStr); date2 = moment.utc(dateStr, ['MM/DD/YYYY HH:mm:ss'], true); assert.equal(date1.format(), date2.format(), "can parse dates of year 1"); |
