/** * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2017 * @license Apache-2.0 */ import Operation from "../Operation"; import BigNumber from "bignumber.js"; import OperationError from "../errors/OperationError"; /** * UNIX Timestamp to Windows Filetime operation */ class UNIXTimestampToWindowsFiletime extends Operation { /** * UNIXTimestampToWindowsFiletime constructor */ constructor() { super(); this.name = "UNIX Timestamp to Windows Filetime"; this.module = "Default"; this.description = "Converts a UNIX timestamp to a Windows Filetime value.

A Windows Filetime is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 UTC.

A UNIX timestamp is a 32-bit value representing the number of seconds since January 1, 1970 UTC (the UNIX epoch).

This operation also supports UNIX timestamps in milliseconds, microseconds and nanoseconds."; this.infoURL = "https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx"; this.inputType = "string"; this.outputType = "string"; this.args = [ { "name": "Input units", "type": "option", "value": ["Seconds (s)", "Milliseconds (ms)", "Microseconds (μs)", "Nanoseconds (ns)"] }, { "name": "Output format", "type": "option", "value": ["Decimal", "Hex"] } ]; } /** * @param {string} input * @param {Object[]} args * @returns {string} */ run(input, args) { const [units, format] = args; if (!input) return ""; input = new BigNumber(input); if (units === "Seconds (s)"){ input = input.multipliedBy(new BigNumber("10000000")); } else if (units === "Milliseconds (ms)") { input = input.multipliedBy(new BigNumber("10000")); } else if (units === "Microseconds (μs)") { input = input.multiplyiedBy(new BigNumber("10")); } else if (units === "Nanoseconds (ns)") { input = input.dividedBy(new BigNumber("100")); } else { throw new OperationError("Unrecognised unit"); } input = input.plus(new BigNumber("116444736000000000")); if (format === "Hex"){ return input.toString(16); } else { return input.toFixed(); } } } export default UNIXTimestampToWindowsFiletime;