From 844c14b8cb09a29d5400f1e949f422e2fc2358d1 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 27 Jul 2022 10:13:21 +0200 Subject: [PATCH] MOBILE-4116 core: Avoid using Date instances if possible When the date can be affected by time zone, always use moment --- .../calendar/components/calendar/calendar.ts | 2 +- .../calendar/services/calendar-helper.ts | 8 +++---- .../calendar/services/handlers/view-link.ts | 15 ++++++------ .../pages/discussion/discussion.page.ts | 2 +- .../messages/services/messages-offline.ts | 2 +- .../mod/data/fields/date/component/date.ts | 23 +++++++++---------- src/addons/mod/data/pages/edit/edit.ts | 2 +- src/addons/mod/data/services/data-offline.ts | 2 +- .../mod/forum/services/forum-offline.ts | 4 ++-- .../mod/survey/services/survey-offline.ts | 2 +- .../components/user-avatar/user-avatar.ts | 2 +- src/core/features/compile/services/compile.ts | 2 ++ src/core/features/course/services/course.ts | 2 +- 13 files changed, 35 insertions(+), 33 deletions(-) diff --git a/src/addons/calendar/components/calendar/calendar.ts b/src/addons/calendar/components/calendar/calendar.ts index f273bdf41..0c8ef0178 100644 --- a/src/addons/calendar/components/calendar/calendar.ts +++ b/src/addons/calendar/components/calendar/calendar.ts @@ -509,7 +509,7 @@ class AddonCalendarMonthSlidesItemsManagerSource extends CoreSwipeSlidesDynamicI const weekDays = AddonCalendar.getWeekDays(result.daynames[0].dayno); const weeks = result.weeks as AddonCalendarWeek[]; - const currentDay = new Date().getDate(); + const currentDay = moment().date(); const currentTime = CoreTimeUtils.timestamp(); const preloadedMonth: PreloadedMonth = { diff --git a/src/addons/calendar/services/calendar-helper.ts b/src/addons/calendar/services/calendar-helper.ts index 07201765f..8e263037d 100644 --- a/src/addons/calendar/services/calendar-helper.ts +++ b/src/addons/calendar/services/calendar-helper.ts @@ -136,8 +136,8 @@ export class AddonCalendarHelperProvider { const result = {}; events.forEach((event) => { - const treatedDay = moment(new Date(event.timestart * 1000)); - const endDay = moment(new Date((event.timestart + event.timeduration) * 1000)); + const treatedDay = moment(event.timestart * 1000); + const endDay = moment((event.timestart + event.timeduration) * 1000); // Add the event to all the days it lasts. while (!treatedDay.isAfter(endDay, 'day')) { @@ -661,7 +661,7 @@ export class AddonCalendarHelperProvider { // Fetch months and days. fetchTimestarts.map((fetchTime) => { - const day = moment(new Date(fetchTime * 1000)); + const day = moment(fetchTime * 1000); const monthId = this.getMonthId(day); if (!treatedMonths[monthId]) { @@ -697,7 +697,7 @@ export class AddonCalendarHelperProvider { // Invalidate months and days. invalidateTimestarts.map((fetchTime) => { - const day = moment(new Date(fetchTime * 1000)); + const day = moment(fetchTime * 1000); const monthId = this.getMonthId(day); if (!treatedMonths[monthId]) { diff --git a/src/addons/calendar/services/handlers/view-link.ts b/src/addons/calendar/services/handlers/view-link.ts index 45914e697..fe7f1c0d2 100644 --- a/src/addons/calendar/services/handlers/view-link.ts +++ b/src/addons/calendar/services/handlers/view-link.ts @@ -20,6 +20,7 @@ import { CoreContentLinksAction } from '@features/contentlinks/services/contentl import { CoreNavigator } from '@services/navigator'; import { makeSingleton } from '@singletons'; import { AddonCalendar } from '../calendar'; +import moment from 'moment-timezone'; const SUPPORTED_VIEWS = ['month', 'mini', 'minithree', 'day', 'upcoming', 'upcoming_mini']; @@ -54,9 +55,9 @@ export class AddonCalendarViewLinkHandlerService extends CoreContentLinksHandler }; const timestamp = params.time ? Number(params.time) * 1000 : Date.now(); - const date = new Date(timestamp); - stateParams.year = date.getFullYear(); - stateParams.month = date.getMonth() + 1; + const momentInstance = moment(timestamp); + stateParams.year = momentInstance.year(); + stateParams.month = momentInstance.month() + 1; CoreNavigator.navigateToSitePath('/calendar/index', { params: stateParams, @@ -71,10 +72,10 @@ export class AddonCalendarViewLinkHandlerService extends CoreContentLinksHandler }; const timestamp = params.time ? Number(params.time) * 1000 : Date.now(); - const date = new Date(timestamp); - stateParams.year = date.getFullYear(); - stateParams.month = date.getMonth() + 1; - stateParams.day = date.getDate(); + const momentInstance = moment(timestamp); + stateParams.year = momentInstance.year(); + stateParams.month = momentInstance.month() + 1; + stateParams.day = momentInstance.date(); CoreNavigator.navigateToSitePath('/calendar/day', { params: stateParams, siteId }); diff --git a/src/addons/messages/pages/discussion/discussion.page.ts b/src/addons/messages/pages/discussion/discussion.page.ts index f1ad3d33b..325c226bb 100644 --- a/src/addons/messages/pages/discussion/discussion.page.ts +++ b/src/addons/messages/pages/discussion/discussion.page.ts @@ -1125,7 +1125,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView useridfrom: this.currentUserId, smallmessage: text, text: text, - timecreated: new Date().getTime(), + timecreated: Date.now(), }; message.showDate = this.showDate(message, this.messages[this.messages.length - 1]); this.addMessage(message, false); diff --git a/src/addons/messages/services/messages-offline.ts b/src/addons/messages/services/messages-offline.ts index 1e0942776..38ab67f3b 100644 --- a/src/addons/messages/services/messages-offline.ts +++ b/src/addons/messages/services/messages-offline.ts @@ -313,7 +313,7 @@ export class AddonMessagesOfflineProvider { touserid: toUserId, useridfrom: site.getUserId(), smallmessage: message, - timecreated: new Date().getTime(), + timecreated: Date.now(), deviceoffline: CoreNetwork.isOnline() ? 0 : 1, }; diff --git a/src/addons/mod/data/fields/date/component/date.ts b/src/addons/mod/data/fields/date/component/date.ts index 3ee554577..761953f89 100644 --- a/src/addons/mod/data/fields/date/component/date.ts +++ b/src/addons/mod/data/fields/date/component/date.ts @@ -15,6 +15,7 @@ import { Component } from '@angular/core'; import { CoreTimeUtils } from '@services/utils/time'; import { Translate } from '@singletons'; +import moment, { Moment } from 'moment-timezone'; import { AddonModDataFieldPluginBaseComponent } from '../../../classes/base-field-plugin-component'; /** @@ -43,7 +44,7 @@ export class AddonModDataFieldDateComponent extends AddonModDataFieldPluginBaseC return; } - let date: Date; + let momentInstance: Moment; // Calculate format to use. this.format = CoreTimeUtils.fixFormatForDatetime(CoreTimeUtils.convertPHPToMoment( @@ -55,27 +56,25 @@ export class AddonModDataFieldDateComponent extends AddonModDataFieldPluginBaseC if (this.searchMode) { this.addControl('f_' + this.field.id + '_z'); - date = this.searchFields!['f_' + this.field.id + '_y'] - ? new Date(this.searchFields!['f_' + this.field.id + '_y'] + '-' + + momentInstance = this.searchFields!['f_' + this.field.id + '_y'] + ? moment(this.searchFields!['f_' + this.field.id + '_y'] + '-' + this.searchFields!['f_' + this.field.id + '_m'] + '-' + this.searchFields!['f_' + this.field.id + '_d']) - : new Date(); + : moment(); - this.searchFields!['f_' + this.field.id] = CoreTimeUtils.toDatetimeFormat(date.getTime()); + this.searchFields!['f_' + this.field.id] = CoreTimeUtils.toDatetimeFormat(momentInstance.unix() * 1000); } else { - date = this.value?.content - ? new Date(parseInt(this.value.content, 10) * 1000) - : new Date(); + momentInstance = this.value?.content + ? moment(parseInt(this.value.content, 10) * 1000) + : moment(); } - const seconds = Math.floor(date.getTime() / 1000); - - this.addControl('f_' + this.field.id, CoreTimeUtils.toDatetimeFormat(seconds * 1000)); + this.addControl('f_' + this.field.id, CoreTimeUtils.toDatetimeFormat(momentInstance.unix() * 1000)); if (!this.searchMode && !this.value?.content) { this.onFieldInit.emit({ fieldid: this.field.id, - content: String(seconds), + content: String(momentInstance.unix()), }); } } diff --git a/src/addons/mod/data/pages/edit/edit.ts b/src/addons/mod/data/pages/edit/edit.ts index 094623ace..17cfb151d 100644 --- a/src/addons/mod/data/pages/edit/edit.ts +++ b/src/addons/mod/data/pages/edit/edit.ts @@ -270,7 +270,7 @@ export class AddonModDataEditPage implements OnInit { const modal = await CoreDomUtils.showModalLoading('core.sending', true); // Create an ID to assign files. - const entryTemp = this.entryId ? this.entryId : - (new Date().getTime()); + const entryTemp = this.entryId ? this.entryId : - (Date.now()); let editData: AddonModDataEntryWSField[] = []; try { diff --git a/src/addons/mod/data/services/data-offline.ts b/src/addons/mod/data/services/data-offline.ts index 4fa5d30b9..09884cde1 100644 --- a/src/addons/mod/data/services/data-offline.ts +++ b/src/addons/mod/data/services/data-offline.ts @@ -262,7 +262,7 @@ export class AddonModDataOfflineProvider { ): Promise { const site = await CoreSites.getSite(siteId); - timemodified = timemodified || new Date().getTime(); + timemodified = timemodified || Date.now(); entryId = entryId === undefined || entryId === null ? -timemodified : entryId; const entry: AddonModDataEntryDBRecord = { diff --git a/src/addons/mod/forum/services/forum-offline.ts b/src/addons/mod/forum/services/forum-offline.ts index 01d91e606..cbc4767a4 100644 --- a/src/addons/mod/forum/services/forum-offline.ts +++ b/src/addons/mod/forum/services/forum-offline.ts @@ -170,7 +170,7 @@ export class AddonModForumOfflineProvider { options: JSON.stringify(options || {}), groupid: groupId || AddonModForumProvider.ALL_PARTICIPANTS, userid: userId || site.getUserId(), - timecreated: timeCreated || new Date().getTime(), + timecreated: timeCreated || Date.now(), }; await site.getDb().insertRecord(DISCUSSIONS_TABLE, data); @@ -325,7 +325,7 @@ export class AddonModForumOfflineProvider { message: message, options: JSON.stringify(options || {}), userid: userId || site.getUserId(), - timecreated: new Date().getTime(), + timecreated: Date.now(), }; await site.getDb().insertRecord(REPLIES_TABLE, data); diff --git a/src/addons/mod/survey/services/survey-offline.ts b/src/addons/mod/survey/services/survey-offline.ts index 0a0f468eb..e13e61c70 100644 --- a/src/addons/mod/survey/services/survey-offline.ts +++ b/src/addons/mod/survey/services/survey-offline.ts @@ -137,7 +137,7 @@ export class AddonModSurveyOfflineProvider { courseid: courseId, userid: userId, answers: JSON.stringify(answers), - timecreated: new Date().getTime(), + timecreated: Date.now(), }; await site.getDb().insertRecord(SURVEY_TABLE, entry); diff --git a/src/core/components/user-avatar/user-avatar.ts b/src/core/components/user-avatar/user-avatar.ts index 85a087c19..3c6923e7a 100644 --- a/src/core/components/user-avatar/user-avatar.ts +++ b/src/core/components/user-avatar/user-avatar.ts @@ -114,7 +114,7 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy { if (this.user.lastaccess) { // If the time has passed, don't show the online status. - const time = new Date().getTime() - this.timetoshowusers; + const time = Date.now() - this.timetoshowusers; return this.user.lastaccess * 1000 >= time; } else { diff --git a/src/core/features/compile/services/compile.ts b/src/core/features/compile/services/compile.ts index b18fa7a8a..ff2d9cb8e 100644 --- a/src/core/features/compile/services/compile.ts +++ b/src/core/features/compile/services/compile.ts @@ -82,6 +82,7 @@ import { CoreComponentsRegistry } from '@singletons/components-registry'; import { CoreDom } from '@singletons/dom'; import { CoreForms } from '@singletons/form'; import { CoreText } from '@singletons/text'; +import { CoreTime } from '@singletons/time'; import { CoreUrl } from '@singletons/url'; import { CoreWindow } from '@singletons/window'; import { CoreCache } from '@classes/cache'; @@ -354,6 +355,7 @@ export class CoreCompileProvider { instance['CoreDom'] = CoreDom; instance['CoreForms'] = CoreForms; instance['CoreText'] = CoreText; + instance['CoreTime'] = CoreTime; instance['CoreUrl'] = CoreUrl; instance['CoreWindow'] = CoreWindow; instance['CoreCache'] = CoreCache; diff --git a/src/core/features/course/services/course.ts b/src/core/features/course/services/course.ts index 0e987dc12..4ad01748f 100644 --- a/src/core/features/course/services/course.ts +++ b/src/core/features/course/services/course.ts @@ -1418,7 +1418,7 @@ export class CoreCourseProvider { id: courseId, status: status, previous: previousStatus, - updated: new Date().getTime(), + updated: Date.now(), downloadTime: downloadTime, previousDownloadTime: previousDownloadTime, });