Merge c23a731a545869610685e56f5d1936c3099f798c into 4290ea753912378913b1f3f54e0fc5720afeda5d

This commit is contained in:
tomgond 2026-08-10 02:56:15 -07:00 committed by GitHub
commit bf9dc2c100
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 105 additions and 0 deletions

View File

@ -382,6 +382,7 @@
"Windows Filetime to UNIX Timestamp", "Windows Filetime to UNIX Timestamp",
"UNIX Timestamp to Windows Filetime", "UNIX Timestamp to Windows Filetime",
"DateTime Delta", "DateTime Delta",
"Time Difference",
"Extract dates", "Extract dates",
"Get Time", "Get Time",
"Sleep" "Sleep"

View File

@ -46,6 +46,12 @@ export const HASH_DELIM_OPTIONS = ["Line feed", "CRLF", "Space", "Comma"];
*/ */
export const IP_DELIM_OPTIONS = ["Line feed", "CRLF", "Space", "Comma", "Semi-colon"]; export const IP_DELIM_OPTIONS = ["Line feed", "CRLF", "Space", "Comma", "Semi-colon"];
/**
* Date delimiters
*/
export const DATE_DELIM_OPTIONS = ["Line feed", "CRLF", "Comma", "Semi-colon"];
/** /**
* Split delimiters. * Split delimiters.
*/ */

View File

@ -0,0 +1,76 @@
/**
* @author tomgond [tom.gonda@gmail.com]
* @copyright Crown Copyright 2024
* @license Apache-2.0
*/
import Operation from "../Operation.mjs";
import moment from "moment-timezone";
import Utils from "../Utils.mjs";
import {DATETIME_FORMATS} from "../lib/DateTime.mjs";
import {DATE_DELIM_OPTIONS} from "../lib/Delim.mjs";
import OperationError from "../errors/OperationError.mjs";
/**
* Calculate Time Difference operation
*/
class TimeDifference extends Operation {
/**
* TimeDifference Constructor
*/
constructor() {
super();
this.name = "Time Difference";
this.module = "DateTime";
this.description = "Calculates the difference between two datetime values based on the provided format.";
this.inputType = "string";
this.outputType = "string";
this.args = [
{
"name": "Built in formats",
"type": "populateOption",
"value": DATETIME_FORMATS,
"target": 1
},
{
"name": "Input format string",
"type": "binaryString",
"value": "DD/MM/YYYY HH:mm:ss"
},
{
"name": "Delimiter",
"type": "option",
"value": DATE_DELIM_OPTIONS,
}
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
run(input, args) {
const dateFormat = args[1];
const delimiter = Utils.charRep(args[2]);
input = input.replace(/[\r\n]+$/, "");
const dates = input.split(delimiter);
if (dates.length !== 2) {
throw new OperationError("Error: Input should contain exactly two datetime values separated by a delimiter.");
}
const date1 = moment(dates[0], dateFormat);
const date2 = moment(dates[1], dateFormat);
if (!date1.isValid() || !date2.isValid()) {
throw new OperationError("Error: One of the provided dates is invalid.");
}
const diff = moment.duration(date2.diff(date1));
return `Years:${diff.years()} Months:${diff.months()} Days:${diff.days()} Hours:${diff.hours()} Minutes:${diff.minutes()} Seconds:${diff.seconds()}`;
}
}
export default TimeDifference;

View File

@ -53,4 +53,26 @@ TestRegister.addTests([
}, },
], ],
}, },
{
name: "Time Difference Positive",
input: "03/05/2024 13:03:22;03/06/2025 13:14:50",
expectedOutput: "Years:1 Months:1 Days:0 Hours:0 Minutes:11 Seconds:28",
recipeConfig: [
{
op: "Time Difference",
args: ["Standard date and time", "DD/MM/YYYY HH:mm:ss", "Semi-colon"],
},
],
},
{
name: "Time Difference Negative",
input: "03/05/2024 13:03:22,03/05/2024 11:30:15",
expectedOutput: "Years:0 Months:0 Days:0 Hours:-1 Minutes:-33 Seconds:-7",
recipeConfig: [
{
op: "Time Difference",
args: ["Standard date and time", "DD/MM/YYYY HH:mm:ss", "Comma"],
},
],
},
]); ]);