Filetime.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import BigNumber from "bignumber.js";
  2. /**
  3. * Windows Filetime operations.
  4. *
  5. * @author n1474335 [n1474335@gmail.com]
  6. * @copyright Crown Copyright 2017
  7. * @license Apache-2.0
  8. *
  9. * @namespace
  10. */
  11. const Filetime = {
  12. /**
  13. * @constant
  14. * @default
  15. */
  16. UNITS: ["Seconds (s)", "Milliseconds (ms)", "Microseconds (μs)", "Nanoseconds (ns)"],
  17. /**
  18. * @constant
  19. * @default
  20. */
  21. FILETIME_FORMATS: ["Decimal", "Hex"],
  22. /**
  23. * Windows Filetime to Unix Timestamp operation.
  24. *
  25. * @author bwhitn [brian.m.whitney@outlook.com]
  26. * @param {string} input
  27. * @param {Object[]} args
  28. * @returns {string}
  29. */
  30. runFromFiletimeToUnix: function(input, args) {
  31. let units = args[0],
  32. format = args[1];
  33. if (!input) return "";
  34. if (format === "Hex") {
  35. input = new BigNumber(input, 16);
  36. } else {
  37. input = new BigNumber(input);
  38. }
  39. input = input.minus(new BigNumber("116444736000000000"));
  40. if (units === "Seconds (s)"){
  41. input = input.dividedBy(new BigNumber("10000000"));
  42. } else if (units === "Milliseconds (ms)") {
  43. input = input.dividedBy(new BigNumber("10000"));
  44. } else if (units === "Microseconds (μs)") {
  45. input = input.dividedBy(new BigNumber("10"));
  46. } else if (units === "Nanoseconds (ns)") {
  47. input = input.multipliedBy(new BigNumber("100"));
  48. } else {
  49. throw "Unrecognised unit";
  50. }
  51. return input.toFixed();
  52. },
  53. /**
  54. * Unix Timestamp to Windows Filetime operation.
  55. *
  56. * @author bwhitn [brian.m.whitney@outlook.com]
  57. * @param {string} input
  58. * @param {Object[]} args
  59. * @returns {string}
  60. */
  61. runToFiletimeFromUnix: function(input, args) {
  62. let units = args[0],
  63. format = args[1];
  64. if (!input) return "";
  65. input = new BigNumber(input);
  66. if (units === "Seconds (s)"){
  67. input = input.multipliedBy(new BigNumber("10000000"));
  68. } else if (units === "Milliseconds (ms)") {
  69. input = input.multipliedBy(new BigNumber("10000"));
  70. } else if (units === "Microseconds (μs)") {
  71. input = input.multiplyiedBy(new BigNumber("10"));
  72. } else if (units === "Nanoseconds (ns)") {
  73. input = input.dividedBy(new BigNumber("100"));
  74. } else {
  75. throw "Unrecognised unit";
  76. }
  77. input = input.plus(new BigNumber("116444736000000000"));
  78. if (format === "Hex"){
  79. return input.toString(16);
  80. } else {
  81. return input.toFixed();
  82. }
  83. },
  84. };
  85. export default Filetime;