From eb724d9add2c2752c7f9ded245aae7ba6bb2aca5 Mon Sep 17 00:00:00 2001 From: Pierre Paridans Date: Wed, 18 Mar 2020 17:18:44 +0000 Subject: [FIX] mail: correctly parse datetime returned from server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a user is Out-of-Office, the return date is displayed as "Invalid date" on Safari (both iOS & macOS). The parsing of the date returned by the server was done using the Date constructor and passing the string as-is. This constructor delegates the parsing to the `Date.parse` method. But the DateTime format used to stringify dates in Odoo doesn't fully follow the ISO 8601, as required by `Date.parse()`: expected format: "YYYY-MM-DDTHH:mm:ss.sssZ" actual format: "YYYY-MM-DD HH:mm:ss" Also, Safari applies more strictly to this requirement than Chrome & Firefox, resulting in a parsing error in the former browser. This commit fixes it by using the utility function `str_to_datetime` from `web.time` to correctly parse this date, independently of the browser used. NB: as this issue is browser dependent, no test has been added. References: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse https://tc39.es/ecma262/#sec-date-time-string-format Task ID: 2198486 closes odoo/odoo#47987 X-original-commit: b85a44aea9617b9018dd80d5f8159354bbc88f09 Signed-off-by: Adrien Dieudonné (adr) --- addons/mail/static/src/js/models/threads/dm_chat.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/mail/static/src/js/models/threads/dm_chat.js') diff --git a/addons/mail/static/src/js/models/threads/dm_chat.js b/addons/mail/static/src/js/models/threads/dm_chat.js index b811b5a5cd5..177c5224ea4 100644 --- a/addons/mail/static/src/js/models/threads/dm_chat.js +++ b/addons/mail/static/src/js/models/threads/dm_chat.js @@ -5,6 +5,7 @@ var ChannelSeenMixin = require('mail.model.ChannelSeenMixin'); var TwoUserChannel = require('mail.model.TwoUserChannel'); var core = require('web.core'); +const { str_to_datetime } = require('web.time'); var _t = core._t; @@ -67,7 +68,7 @@ var DMChat = TwoUserChannel.extend(ChannelSeenMixin, { return undefined; } var currentDate = new Date(); - var date = new Date(this._outOfOfficeDateEnd); + var date = str_to_datetime(this._outOfOfficeDateEnd); var options = { day: 'numeric', month: 'short' }; if (currentDate.getFullYear() !== date.getFullYear()) { options.year = 'numeric'; -- cgit v1.2.3