From d27fa43120dba613528545f5eab2bf662d8d3c6b Mon Sep 17 00:00:00 2001 From: bwhitn Date: Thu, 8 Jun 2017 07:23:11 -0700 Subject: [PATCH] Add conversions for from/to Windows Filetime to UNIX Epoch. Decimal.js is used to prevent rounding errors during conversion. --- src/core/config/OperationConfig.js | 14 +++++++++++ src/core/operations/DateTime.js | 37 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index 5fd5a9ee..346ca6a7 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -2261,6 +2261,20 @@ const OperationConfig = { } ] }, + "From Windows Filetime To UNIX":{ + description: "Converts a Windows Filetime timestamp to a datetime format", + run: DateTime.runFromFiletimeToUnix, + inputType: "string", + outputType: "string", + args: [] + }, + "To Windows Filetime From UNIX":{ + description: "Parses a datetime string in UTC and returns the corresponding Windows Filetime timestamp", + run: DateTime.runToFiletimeFromUnix, + inputType: "string", + outputType: "string", + args: [] + }, "Translate DateTime Format": { description: "Parses a datetime string in one format and re-writes it in another.

Run with no input to see the relevant format string examples.", run: DateTime.runTranslateFormat, diff --git a/src/core/operations/DateTime.js b/src/core/operations/DateTime.js index 523206b2..18fa3194 100755 --- a/src/core/operations/DateTime.js +++ b/src/core/operations/DateTime.js @@ -1,3 +1,5 @@ +import Decimal from 'decimal.js'; + /** * Date and time operations. * @@ -78,6 +80,41 @@ const DateTime = { }, + /** + * Converts a Windows FILETIME to Unix Epoch time. + * + * @param {string} input + * @param {Object[]} args (not used) + * @returns {string} + */ + runFromFiletimeToUnix: function(input, args) { + input = new Decimal(input); + input = input.sub(116444736000000000).div(10000000); + if(input.gte(0) && input.lt(Math.pow(2,31))){ + return input.toString(); + } else { + throw "Date " + input + " is not a valid date"; + } + }, + + + /** + * Converts a Unix Epoch time to Windows FILETIME. + * + * @param {string} input + * @param {Object[]} args (not used) + * @returns {string} + */ + runToFiletimeFromUnix: function(input, args) { + input = new Decimal(input); + if(input.gte(0) && input.lt(Math.pow(2,31))){ + return input.mul(10000000).add(116444736000000000).toHex(); + } else { + throw "Date " + input + " is not a valid date"; + } + }, + + /** * @constant * @default