Merge branch 'bwhitn-master'

This commit is contained in:
n1474335 2017-06-13 15:33:59 +00:00
commit bf2950abdd
5 changed files with 119 additions and 2 deletions

View File

@ -193,6 +193,8 @@ const Categories = [
"Translate DateTime Format", "Translate DateTime Format",
"From UNIX Timestamp", "From UNIX Timestamp",
"To UNIX Timestamp", "To UNIX Timestamp",
"Windows Filetime to UNIX Timestamp",
"UNIX Timestamp to Windows Filetime",
"Extract dates", "Extract dates",
] ]
}, },

View File

@ -2231,7 +2231,7 @@ const OperationConfig = {
] ]
}, },
"From UNIX Timestamp": { "From UNIX Timestamp": {
description: "Converts a UNIX timestamp to a datetime string.<br><br>e.g. <code>978346800</code> becomes <code>Mon 1 January 2001 11:00:00 UTC</code>", description: "Converts a UNIX timestamp to a datetime string.<br><br>e.g. <code>978346800</code> becomes <code>Mon 1 January 2001 11:00:00 UTC</code><br><br>A UNIX timestamp is a 32-bit value representing the number of seconds since January 1, 1970 UTC (the UNIX epoch).",
run: DateTime.runFromUnixTimestamp, run: DateTime.runFromUnixTimestamp,
inputType: "number", inputType: "number",
outputType: "string", outputType: "string",
@ -2244,7 +2244,7 @@ const OperationConfig = {
] ]
}, },
"To UNIX Timestamp": { "To UNIX Timestamp": {
description: "Parses a datetime string in UTC and returns the corresponding UNIX timestamp.<br><br>e.g. <code>Mon 1 January 2001 11:00:00</code> becomes <code>978346800</code>", description: "Parses a datetime string in UTC and returns the corresponding UNIX timestamp.<br><br>e.g. <code>Mon 1 January 2001 11:00:00</code> becomes <code>978346800</code><br><br>A UNIX timestamp is a 32-bit value representing the number of seconds since January 1, 1970 UTC (the UNIX epoch).",
run: DateTime.runToUnixTimestamp, run: DateTime.runToUnixTimestamp,
inputType: "string", inputType: "string",
outputType: "number", outputType: "number",
@ -2261,6 +2261,32 @@ const OperationConfig = {
} }
] ]
}, },
"Windows Filetime to UNIX Timestamp":{
description: "Converts a Windows Filetime value to a UNIX timestamp.<br><br>A Windows Filetime is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 UTC.<br><br>A UNIX timestamp is a 32-bit value representing the number of seconds since January 1, 1970 UTC (the UNIX epoch).<br><br>This operation also supports UNIX timestamps in milliseconds, microseconds and nanoseconds.",
run: DateTime.runFromFiletimeToUnix,
inputType: "string",
outputType: "string",
args: [
{
name: "Output units",
type: "option",
value: DateTime.UNITS
}
]
},
"UNIX Timestamp to Windows Filetime":{
description: "Converts a UNIX timestamp to a Windows Filetime value.<br><br>A Windows Filetime is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 UTC.<br><br>A UNIX timestamp is a 32-bit value representing the number of seconds since January 1, 1970 UTC (the UNIX epoch).<br><br>This operation also supports UNIX timestamps in milliseconds, microseconds and nanoseconds.",
run: DateTime.runToFiletimeFromUnix,
inputType: "string",
outputType: "string",
args: [
{
name: "Input units",
type: "option",
value: DateTime.UNITS
}
]
},
"Translate DateTime Format": { "Translate DateTime Format": {
description: "Parses a datetime string in one format and re-writes it in another.<br><br>Run with no input to see the relevant format string examples.", description: "Parses a datetime string in one format and re-writes it in another.<br><br>Run with no input to see the relevant format string examples.",
run: DateTime.runTranslateFormat, run: DateTime.runTranslateFormat,

View File

@ -1,3 +1,5 @@
import {BigInteger} from "jsbn";
/** /**
* Date and time operations. * Date and time operations.
* *
@ -78,6 +80,58 @@ const DateTime = {
}, },
/**
* Windows Filetime to Unix Timestamp operation.
*
* @author bwhitn [brian.m.whitney@outlook.com]
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
runFromFiletimeToUnix: function(input, args) {
let units = args[0];
input = new BigInteger(input).subtract(new BigInteger("116444736000000000"));
if (units === "Seconds (s)"){
input = input.divide(new BigInteger("10000000"));
} else if (units === "Milliseconds (ms)") {
input = input.divide(new BigInteger("10000"));
} else if (units === "Microseconds (μs)") {
input = input.divide(new BigInteger("10"));
} else if (units === "Nanoseconds (ns)") {
input = input.multiply(new BigInteger("100"));
} else {
throw "Unrecognised unit";
}
return input.toString();
},
/**
* Unix Timestamp to Windows Filetime operation.
*
* @author bwhitn [brian.m.whitney@outlook.com]
* @param {string} input
* @param {Object[]} args
* @returns {string}
*/
runToFiletimeFromUnix: function(input, args) {
let units = args[0];
input = new BigInteger(input);
if (units === "Seconds (s)"){
input = input.multiply(new BigInteger("10000000"));
} else if (units === "Milliseconds (ms)") {
input = input.multiply(new BigInteger("10000"));
} else if (units === "Microseconds (μs)") {
input = input.multiply(new BigInteger("10"));
} else if (units === "Nanoseconds (ns)") {
input = input.divide(new BigInteger("100"));
} else {
throw "Unrecognised unit";
}
return input.add(new BigInteger("116444736000000000")).toString();
},
/** /**
* @constant * @constant
* @default * @default

View File

@ -16,6 +16,7 @@ import "./tests/operations/ByteRepr.js";
import "./tests/operations/CharEnc.js"; import "./tests/operations/CharEnc.js";
import "./tests/operations/Code.js"; import "./tests/operations/Code.js";
import "./tests/operations/Compress.js"; import "./tests/operations/Compress.js";
import "./tests/operations/DateTime.js";
import "./tests/operations/FlowControl.js"; import "./tests/operations/FlowControl.js";
import "./tests/operations/Image.js"; import "./tests/operations/Image.js";
import "./tests/operations/MorseCode.js"; import "./tests/operations/MorseCode.js";

View File

@ -0,0 +1,34 @@
/**
* DateTime tests.
*
* @author bwhitn [brian.m.whitney@outlook.com]
*
* @copyright Crown Copyright 2017
* @license Apache-2.0
*/
import TestRegister from "../../TestRegister.js";
TestRegister.addTests([
{
name: "Filetime to Unix",
input: "129207366395297693",
expectedOutput: "1276263039529769300",
recipeConfig: [
{
op: "Windows Filetime to UNIX Timestamp",
args: ["Nanoseconds (ns)"],
},
],
},
{
name: "Unix to Filetime",
input: "1276263039529769300",
expectedOutput: "129207366395297693",
recipeConfig: [
{
op: "UNIX Timestamp to Windows Filetime",
args: ["Nanoseconds (ns)"],
},
],
},
]);