From cd98fb5be5ebd3aa617106f5fdccb4d0b984cfe1 Mon Sep 17 00:00:00 2001 From: agobrech Date: Thu, 6 Apr 2023 12:04:32 +0200 Subject: [PATCH] Add generic function for parsing date --- .../nodes/DateTime/V2/CurrentDateDescription.ts | 2 +- .../nodes/DateTime/V2/DateTimeV2.node.ts | 14 +++++--------- .../nodes/DateTime/V2/ExtractDateDescription.ts | 2 +- .../nodes/DateTime/V2/GenericFunctions.ts | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 packages/nodes-base/nodes/DateTime/V2/GenericFunctions.ts diff --git a/packages/nodes-base/nodes/DateTime/V2/CurrentDateDescription.ts b/packages/nodes-base/nodes/DateTime/V2/CurrentDateDescription.ts index cebbc6ba4d..143a091f29 100644 --- a/packages/nodes-base/nodes/DateTime/V2/CurrentDateDescription.ts +++ b/packages/nodes-base/nodes/DateTime/V2/CurrentDateDescription.ts @@ -3,7 +3,7 @@ import type { INodeProperties } from 'n8n-workflow'; export const CurrentDateDescription: INodeProperties[] = [ { displayName: - 'You can also refer to the current date in n8n expressions by using {{$now}} or {{$today}}. {{$now}} or {{$today}}. More info', name: 'notice', type: 'notice', default: '', diff --git a/packages/nodes-base/nodes/DateTime/V2/DateTimeV2.node.ts b/packages/nodes-base/nodes/DateTime/V2/DateTimeV2.node.ts index 6dacec3ee9..4477b05e07 100644 --- a/packages/nodes-base/nodes/DateTime/V2/DateTimeV2.node.ts +++ b/packages/nodes-base/nodes/DateTime/V2/DateTimeV2.node.ts @@ -20,6 +20,7 @@ import { GetTimeBetweenDatesDescription } from './GetTimeBetweenDates'; import type { DurationUnit } from 'luxon'; import { DateTime } from 'luxon'; import { ExtractDateDescription } from './ExtractDateDescription'; +import { parseDate } from './GenericFunctions'; export class DateTimeV2 implements INodeType { description: INodeTypeDescription; @@ -202,22 +203,17 @@ export class DateTimeV2 implements INodeType { const duration = luxonEndDate.diff(luxonStartDate, unit); responseData.push({ [outputFieldName]: duration.toObject() }); } else if (operation === 'extractDate') { - const date = this.getNodeParameter('date', i); + const date = this.getNodeParameter('date', i) as string | DateTime; const outputFieldName = this.getNodeParameter('outputFieldName', i) as string; const part = this.getNodeParameter('part', i) as keyof DateTime; let parsedDate; - let selectedPart; try { - console.log(date); - parsedDate = DateTime.isDateTime(date) - ? date - : moment.tz(date, workflowTimezone).toISOString(); - selectedPart = DateTime.isDateTime(date) - ? date.get(part) - : DateTime.fromISO(parsedDate as string).get(part); + parsedDate = parseDate.call(this, date, workflowTimezone); } catch { throw new NodeOperationError(this.getNode(), 'Invalid date format'); } + + const selectedPart = parsedDate.get(part); responseData.push({ [outputFieldName]: selectedPart }); } const executionData = this.helpers.constructExecutionMetaData( diff --git a/packages/nodes-base/nodes/DateTime/V2/ExtractDateDescription.ts b/packages/nodes-base/nodes/DateTime/V2/ExtractDateDescription.ts index 0ebe8d5669..05219d86e3 100644 --- a/packages/nodes-base/nodes/DateTime/V2/ExtractDateDescription.ts +++ b/packages/nodes-base/nodes/DateTime/V2/ExtractDateDescription.ts @@ -3,7 +3,7 @@ import type { INodeProperties } from 'n8n-workflow'; export const ExtractDateDescription: INodeProperties[] = [ { displayName: - 'You can also do this using an expression, e.g. {{ your_date.extract("month") }}}. {{ your_date.extract("month") }}}. More info', name: 'notice', type: 'notice', default: '', diff --git a/packages/nodes-base/nodes/DateTime/V2/GenericFunctions.ts b/packages/nodes-base/nodes/DateTime/V2/GenericFunctions.ts new file mode 100644 index 0000000000..67719cfd8f --- /dev/null +++ b/packages/nodes-base/nodes/DateTime/V2/GenericFunctions.ts @@ -0,0 +1,14 @@ +import { DateTime } from 'luxon'; +import moment from 'moment'; + +export function parseDate(date: string | DateTime, timezone: string) { + let parsedDate; + + if (date instanceof DateTime) { + parsedDate = date; + console.log('here'); + } else { + parsedDate = DateTime.fromISO(moment.tz(date, timezone).toISOString()); + } + return parsedDate; +}