diff --git a/src/core/config/OperationConfig.js b/src/core/config/OperationConfig.js index b2eb621c..f8d9fe6d 100755 --- a/src/core/config/OperationConfig.js +++ b/src/core/config/OperationConfig.js @@ -2301,6 +2301,11 @@ const OperationConfig = { name: "Output units", type: "option", value: DateTime.UNITS + }, + { + name: "Input format", + type: "option", + value: DateTime.FILETIME_FORMATS } ] }, @@ -2314,6 +2319,11 @@ const OperationConfig = { name: "Input units", type: "option", value: DateTime.UNITS + }, + { + name: "Output format", + type: "option", + value: DateTime.FILETIME_FORMATS } ] }, diff --git a/src/core/operations/DateTime.js b/src/core/operations/DateTime.js index 5262ecc4..b665a2b5 100755 --- a/src/core/operations/DateTime.js +++ b/src/core/operations/DateTime.js @@ -89,8 +89,17 @@ const DateTime = { * @returns {string} */ runFromFiletimeToUnix: function(input, args) { - let units = args[0]; - input = new BigInteger(input).subtract(new BigInteger("116444736000000000")); + let units = args[0], + format = args[1]; + + if (format === "Hex") { + input = new BigInteger(input, 16); + } else { + input = new BigInteger(input); + } + + input = input.subtract(new BigInteger("116444736000000000")); + if (units === "Seconds (s)"){ input = input.divide(new BigInteger("10000000")); } else if (units === "Milliseconds (ms)") { @@ -102,6 +111,7 @@ const DateTime = { } else { throw "Unrecognised unit"; } + return input.toString(); }, @@ -115,8 +125,11 @@ const DateTime = { * @returns {string} */ runToFiletimeFromUnix: function(input, args) { - let units = args[0]; + let units = args[0], + format = args[1]; + input = new BigInteger(input); + if (units === "Seconds (s)"){ input = input.multiply(new BigInteger("10000000")); } else if (units === "Milliseconds (ms)") { @@ -128,10 +141,24 @@ const DateTime = { } else { throw "Unrecognised unit"; } - return input.add(new BigInteger("116444736000000000")).toString(); + + input = input.add(new BigInteger("116444736000000000")); + + if (format === "Hex"){ + return input.toString(16); + } else { + return input.toString(); + } }, + /** + * @constant + * @default + */ + FILETIME_FORMATS: ["Decimal", "Hex"], + + /** * @constant * @default diff --git a/test/tests/operations/DateTime.js b/test/tests/operations/DateTime.js index 7ee445ff..f8226ac6 100644 --- a/test/tests/operations/DateTime.js +++ b/test/tests/operations/DateTime.js @@ -16,7 +16,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "Windows Filetime to UNIX Timestamp", - args: ["Nanoseconds (ns)"], + args: ["Nanoseconds (ns)", "Decimal"], }, ], }, @@ -27,7 +27,7 @@ TestRegister.addTests([ recipeConfig: [ { op: "UNIX Timestamp to Windows Filetime", - args: ["Nanoseconds (ns)"], + args: ["Nanoseconds (ns)", "Decimal"], }, ], },