[FIX] mail: correctly parse datetime returned from server

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) <adr@odoo.com>
This commit is contained in:
Pierre Paridans
2020-03-19 09:38:07 +00:00
parent fe376d50d0
commit eb724d9add
@@ -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';