123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- /* globals moment */
- /**
- * Date and time operations.
- *
- * @author n1474335 [n1474335@gmail.com]
- * @copyright Crown Copyright 2016
- * @license Apache-2.0
- *
- * @namespace
- */
- var DateTime = {
- /**
- * @constant
- * @default
- */
- UNITS: ["Seconds (s)", "Milliseconds (ms)", "Microseconds (μs)", "Nanoseconds (ns)"],
- /**
- * From UNIX Timestamp operation.
- *
- * @param {number} input
- * @param {Object[]} args
- * @returns {string}
- */
- runFromUnixTimestamp: function(input, args) {
- var units = args[0],
- d;
- input = parseFloat(input);
- if (units === "Seconds (s)") {
- d = moment.unix(input);
- return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";
- } else if (units === "Milliseconds (ms)") {
- d = moment(input);
- return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC";
- } else if (units === "Microseconds (μs)") {
- d = moment(input / 1000);
- return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC";
- } else if (units === "Nanoseconds (ns)") {
- d = moment(input / 1000000);
- return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss.SSS") + " UTC";
- } else {
- throw "Unrecognised unit";
- }
- },
- /**
- * To UNIX Timestamp operation.
- *
- * @param {string} input
- * @param {Object[]} args
- * @returns {number}
- */
- runToUnixTimestamp: function(input, args) {
- var units = args[0],
- d = moment(input);
- if (units === "Seconds (s)") {
- return d.unix();
- } else if (units === "Milliseconds (ms)") {
- return d.valueOf();
- } else if (units === "Microseconds (μs)") {
- return d.valueOf() * 1000;
- } else if (units === "Nanoseconds (ns)") {
- return d.valueOf() * 1000000;
- } else {
- throw "Unrecognised unit";
- }
- },
- /**
- * @constant
- * @default
- */
- DATETIME_FORMATS: [
- {
- name: "Standard date and time",
- value: "DD/MM/YYYY HH:mm:ss"
- },
- {
- name: "American-style date and time",
- value: "MM/DD/YYYY HH:mm:ss"
- },
- {
- name: "International date and time",
- value: "YYYY-MM-DD HH:mm:ss"
- },
- {
- name: "Verbose date and time",
- value: "dddd Do MMMM YYYY HH:mm:ss Z z"
- },
- {
- name: "UNIX timestamp (seconds)",
- value: "X"
- },
- {
- name: "UNIX timestamp offset (milliseconds)",
- value: "x"
- },
- {
- name: "Automatic",
- value: ""
- },
- ],
- /**
- * @constant
- * @default
- */
- INPUT_FORMAT_STRING: "DD/MM/YYYY HH:mm:ss",
- /**
- * @constant
- * @default
- */
- OUTPUT_FORMAT_STRING: "dddd Do MMMM YYYY HH:mm:ss Z z",
- /**
- * @constant
- * @default
- */
- TIMEZONES: ["UTC"].concat(moment.tz.names()),
- /**
- * Translate DateTime Format operation.
- *
- * @param {string} input
- * @param {Object[]} args
- * @returns {html}
- */
- runTranslateFormat: function(input, args) {
- var inputFormat = args[1],
- inputTimezone = args[2],
- outputFormat = args[3],
- outputTimezone = args[4],
- date;
- try {
- date = moment.tz(input, inputFormat, inputTimezone);
- if (!date || date.format() === "Invalid date") throw Error;
- } catch (err) {
- return "Invalid format.\n\n" + DateTime.FORMAT_EXAMPLES;
- }
- return date.tz(outputTimezone).format(outputFormat);
- },
- /**
- * Parse DateTime operation.
- *
- * @param {string} input
- * @param {Object[]} args
- * @returns {html}
- */
- runParse: function(input, args) {
- var inputFormat = args[1],
- inputTimezone = args[2],
- date,
- output = "";
- try {
- date = moment.tz(input, inputFormat, inputTimezone);
- if (!date || date.format() === "Invalid date") throw Error;
- } catch (err) {
- return "Invalid format.\n\n" + DateTime.FORMAT_EXAMPLES;
- }
- output += "Date: " + date.format("dddd Do MMMM YYYY") +
- "\nTime: " + date.format("HH:mm:ss") +
- "\nPeriod: " + date.format("A") +
- "\nTimezone: " + date.format("z") +
- "\nUTC offset: " + date.format("ZZ") +
- "\n\nDaylight Saving Time: " + date.isDST() +
- "\nLeap year: " + date.isLeapYear() +
- "\nDays in this month: " + date.daysInMonth() +
- "\n\nDay of year: " + date.dayOfYear() +
- "\nWeek number: " + date.weekYear() +
- "\nQuarter: " + date.quarter();
- return output;
- },
- /**
- * @constant
- */
- FORMAT_EXAMPLES: "Format string tokens:\n\n\
- <table class='table table-striped table-hover table-condensed table-bordered' style='font-family: sans-serif'>\
- <thead>\
- <tr>\
- <th>Category</th>\
- <th>Token</th>\
- <th>Output</th>\
- </tr>\
- </thead>\
- <tbody>\
- <tr>\
- <td><b>Month</b></td>\
- <td>M</td>\
- <td>1 2 ... 11 12</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>Mo</td>\
- <td>1st 2nd ... 11th 12th</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>MM</td>\
- <td>01 02 ... 11 12</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>MMM</td>\
- <td>Jan Feb ... Nov Dec</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>MMMM</td>\
- <td>January February ... November December</td>\
- </tr>\
- <tr>\
- <td><b>Quarter</b></td>\
- <td>Q</td>\
- <td>1 2 3 4</td>\
- </tr>\
- <tr>\
- <td><b>Day of Month</b></td>\
- <td>D</td>\
- <td>1 2 ... 30 31</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>Do</td>\
- <td>1st 2nd ... 30th 31st</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>DD</td>\
- <td>01 02 ... 30 31</td>\
- </tr>\
- <tr>\
- <td><b>Day of Year</b></td>\
- <td>DDD</td>\
- <td>1 2 ... 364 365</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>DDDo</td>\
- <td>1st 2nd ... 364th 365th</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>DDDD</td>\
- <td>001 002 ... 364 365</td>\
- </tr>\
- <tr>\
- <td><b>Day of Week</b></td>\
- <td>d</td>\
- <td>0 1 ... 5 6</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>do</td>\
- <td>0th 1st ... 5th 6th</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>dd</td>\
- <td>Su Mo ... Fr Sa</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>ddd</td>\
- <td>Sun Mon ... Fri Sat</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>dddd</td>\
- <td>Sunday Monday ... Friday Saturday</td>\
- </tr>\
- <tr>\
- <td><b>Day of Week (Locale)</b></td>\
- <td>e</td>\
- <td>0 1 ... 5 6</td>\
- </tr>\
- <tr>\
- <td><b>Day of Week (ISO)</b></td>\
- <td>E</td>\
- <td>1 2 ... 6 7</td>\
- </tr>\
- <tr>\
- <td><b>Week of Year</b></td>\
- <td>w</td>\
- <td>1 2 ... 52 53</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>wo</td>\
- <td>1st 2nd ... 52nd 53rd</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>ww</td>\
- <td>01 02 ... 52 53</td>\
- </tr>\
- <tr>\
- <td><b>Week of Year (ISO)</b></td>\
- <td>W</td>\
- <td>1 2 ... 52 53</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>Wo</td>\
- <td>1st 2nd ... 52nd 53rd</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>WW</td>\
- <td>01 02 ... 52 53</td>\
- </tr>\
- <tr>\
- <td><b>Year</b></td>\
- <td>YY</td>\
- <td>70 71 ... 29 30</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>YYYY</td>\
- <td>1970 1971 ... 2029 2030</td>\
- </tr>\
- <tr>\
- <td><b>Week Year</b></td>\
- <td>gg</td>\
- <td>70 71 ... 29 30</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>gggg</td>\
- <td>1970 1971 ... 2029 2030</td>\
- </tr>\
- <tr>\
- <td><b>Week Year (ISO)</b></td>\
- <td>GG</td>\
- <td>70 71 ... 29 30</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>GGGG</td>\
- <td>1970 1971 ... 2029 2030</td>\
- </tr>\
- <tr>\
- <td><b>AM/PM</b></td>\
- <td>A</td>\
- <td>AM PM</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>a</td>\
- <td>am pm</td>\
- </tr>\
- <tr>\
- <td><b>Hour</b></td>\
- <td>H</td>\
- <td>0 1 ... 22 23</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>HH</td>\
- <td>00 01 ... 22 23</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>h</td>\
- <td>1 2 ... 11 12</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>hh</td>\
- <td>01 02 ... 11 12</td>\
- </tr>\
- <tr>\
- <td><b>Minute</b></td>\
- <td>m</td>\
- <td>0 1 ... 58 59</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>mm</td>\
- <td>00 01 ... 58 59</td>\
- </tr>\
- <tr>\
- <td><b>Second</b></td>\
- <td>s</td>\
- <td>0 1 ... 58 59</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>ss</td>\
- <td>00 01 ... 58 59</td>\
- </tr>\
- <tr>\
- <td><b>Fractional Second</b></td>\
- <td>S</td>\
- <td>0 1 ... 8 9</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>SS</td>\
- <td>00 01 ... 98 99</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>SSS</td>\
- <td>000 001 ... 998 999</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>SSSS ... SSSSSSSSS</td>\
- <td>000[0..] 001[0..] ... 998[0..] 999[0..]</td>\
- </tr>\
- <tr>\
- <td><b>Timezone</b></td>\
- <td>z or zz</td>\
- <td>EST CST ... MST PST</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>Z</td>\
- <td>-07:00 -06:00 ... +06:00 +07:00</td>\
- </tr>\
- <tr>\
- <td></td>\
- <td>ZZ</td>\
- <td>-0700 -0600 ... +0600 +0700</td>\
- </tr>\
- <tr>\
- <td><b>Unix Timestamp</b></td>\
- <td>X</td>\
- <td>1360013296</td>\
- </tr>\
- <tr>\
- <td><b>Unix Millisecond Timestamp</b></td>\
- <td>x</td>\
- <td>1360013296123</td>\
- </tr>\
- </tbody>\
- </table>",
- };
|