summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/components/datepicker.js2
-rw-r--r--addons/web/static/src/js/fields/field_utils.js21
-rw-r--r--addons/web/static/src/js/widgets/date_picker.js2
-rw-r--r--addons/web/static/tests/fields/field_utils_tests.js7
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");