2018-05-14 17:48:57 +00:00
/**
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*/
2019-07-09 12:23:59 +01:00
import Operation from "../Operation.mjs" ;
2018-05-14 17:48:57 +00:00
import moment from "moment-timezone" ;
2019-07-09 12:23:59 +01:00
import { UNITS } from "../lib/DateTime.mjs" ;
import OperationError from "../errors/OperationError.mjs" ;
2018-05-14 17:48:57 +00:00
/**
* To UNIX Timestamp operation
*/
class ToUNIXTimestamp extends Operation {
/**
* ToUNIXTimestamp constructor
*/
constructor () {
super ();
this . name = "To UNIX Timestamp" ;
this . module = "Default" ;
this . 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)." ;
2018-08-21 19:07:13 +01:00
this . infoURL = "https://wikipedia.org/wiki/Unix_time" ;
2018-05-14 17:48:57 +00:00
this . inputType = "string" ;
this . outputType = "string" ;
this . args = [
{
"name" : "Units" ,
"type" : "option" ,
"value" : UNITS
},
{
"name" : "Treat as UTC" ,
"type" : "boolean" ,
"value" : true
},
{
"name" : "Show parsed datetime" ,
"type" : "boolean" ,
"value" : true
}
];
}
/**
* @param {string} input
* @param {Object[]} args
* @returns {string}
2018-05-15 18:01:04 +01:00
*
* @throws {OperationError} if unit unrecognised
2018-05-14 17:48:57 +00:00
*/
run ( input , args ) {
const [ units , treatAsUTC , showDateTime ] = args ,
d = treatAsUTC ? moment . utc ( input ) : moment ( input );
let result = "" ;
if ( units === "Seconds (s)" ) {
result = d . unix ();
} else if ( units === "Milliseconds (ms)" ) {
result = d . valueOf ();
} else if ( units === "Microseconds (μs)" ) {
result = d . valueOf () * 1000 ;
} else if ( units === "Nanoseconds (ns)" ) {
result = d . valueOf () * 1000000 ;
} else {
2018-05-15 18:01:04 +01:00
throw new OperationError ( "Unrecognised unit" );
2018-05-14 17:48:57 +00:00
}
return showDateTime ? ` ${ result } ( ${ d . tz ( "UTC" ). format ( "ddd D MMMM YYYY HH:mm:ss" ) } UTC)` : result . toString ();
}
}
export default ToUNIXTimestamp ;