From 8a43c39f491788b2e94ba5a0412ca9a85303a828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Thu, 15 Oct 2020 15:50:50 +0200 Subject: [PATCH] MOBILE-3565 pipes: Add format date pipe --- src/app/pipes/format-date.pipe.ts | 70 +++++++++++++++++++++++++++++++ src/app/pipes/pipes.module.ts | 3 ++ 2 files changed, 73 insertions(+) create mode 100644 src/app/pipes/format-date.pipe.ts diff --git a/src/app/pipes/format-date.pipe.ts b/src/app/pipes/format-date.pipe.ts new file mode 100644 index 000000000..7be53b6dc --- /dev/null +++ b/src/app/pipes/format-date.pipe.ts @@ -0,0 +1,70 @@ +// (C) Copyright 2015 Moodle Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Pipe, PipeTransform } from '@angular/core'; +import { CoreTimeUtils } from '@services/utils/time'; +import { CoreLogger } from '@singletons/logger'; + +/** + * Filter to format a date. + */ +@Pipe({ + name: 'coreFormatDate', +}) +export class CoreFormatDatePipe implements PipeTransform { + + protected logger: CoreLogger; + + constructor() { + this.logger = CoreLogger.getInstance('CoreFormatDatePipe'); + } + + /** + * Format a date. + * + * @param timestamp Timestamp to format (in milliseconds). If not defined, use current time. + * @param format Format to use. It should be a string code to handle i18n (e.g. core.strftimetime). + * Defaults to strftimedaydatetime. + * @param convert If true, convert the format from PHP to Moment. Set it to false for Moment formats. + * @return Formatted date. + */ + transform(timestamp: string | number, format?: string, convert?: boolean): string { + timestamp = timestamp || Date.now(); + format = format || 'strftimedaydatetime'; + + if (typeof timestamp == 'string') { + // Convert the value to a number. + const numberTimestamp = parseInt(timestamp, 10); + if (isNaN(numberTimestamp)) { + this.logger.error('Invalid value received', timestamp); + + return timestamp; + } + timestamp = numberTimestamp; + } + + // Add "core." if needed. + if (format.indexOf('strf') == 0 || format.indexOf('df') == 0) { + format = 'core.' + format; + } + + if (typeof convert == 'undefined') { + // Initialize convert param. Set it to false if it's a core.df format, set it to true otherwise. + convert = format.indexOf('core.df') != 0; + } + + return CoreTimeUtils.instance.userDate(timestamp, format, convert); + } + +} diff --git a/src/app/pipes/pipes.module.ts b/src/app/pipes/pipes.module.ts index 62373d7f6..4108c1255 100644 --- a/src/app/pipes/pipes.module.ts +++ b/src/app/pipes/pipes.module.ts @@ -14,6 +14,7 @@ import { NgModule } from '@angular/core'; import { CoreCreateLinksPipe } from './create-links.pipe'; +import { CoreFormatDatePipe } from './format-date.pipe'; import { CoreNoTagsPipe } from './no-tags.pipe'; import { CoreTimeAgoPipe } from './time-ago.pipe'; @@ -22,12 +23,14 @@ import { CoreTimeAgoPipe } from './time-ago.pipe'; CoreCreateLinksPipe, CoreNoTagsPipe, CoreTimeAgoPipe, + CoreFormatDatePipe, ], imports: [], exports: [ CoreCreateLinksPipe, CoreNoTagsPipe, CoreTimeAgoPipe, + CoreFormatDatePipe, ], }) export class CorePipesModule {}