date.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var validator = require('utils/validator');
  19. var App = require('app');
  20. module.exports = {
  21. /**
  22. * List of monthes short names
  23. * @type {string[]}
  24. */
  25. dateMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
  26. /**
  27. * List of days short names
  28. * @type {string[]}
  29. */
  30. dateDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  31. /**
  32. * Add leading zero
  33. *
  34. * @param {string} time
  35. * @returns {string}
  36. * @method dateFormatZeroFirst
  37. */
  38. dateFormatZeroFirst: function (time) {
  39. if (time < 10) return '0' + time;
  40. return "" + time;
  41. },
  42. /**
  43. * Convert timestamp to date-string 'DAY_OF_THE_WEEK, MONTH DAY, YEAR HOURS:MINUTES'
  44. *
  45. * @param {number} timestamp
  46. * @param {bool} showSeconds should seconds be added to result string
  47. * @param {bool} showMilliseconds should miliseconds be added to result string (if <code>showSeconds</code> is false, milliseconds wouldn't be added)
  48. * @return {*} date
  49. * @method dateFormat
  50. */
  51. dateFormat: function (timestamp, showSeconds, showMilliseconds) {
  52. if (!validator.isValidInt(timestamp)) {
  53. return timestamp;
  54. }
  55. var format = 'ddd, MMM DD, YYYY HH:mm';
  56. if (showSeconds) {
  57. format += ':ss';
  58. if (showMilliseconds) {
  59. format += ':SSS';
  60. }
  61. }
  62. return moment((new Date(timestamp)).toISOString().replace('Z', '')).format(format);
  63. },
  64. /**
  65. * Convert timestamp to date-string 'DAY_OF_THE_WEEK MONTH DAY YEAR'
  66. *
  67. * @param {string} timestamp
  68. * @return {string}
  69. * @method dateFormatShort
  70. */
  71. dateFormatShort: function (timestamp) {
  72. if (!validator.isValidInt(timestamp)) {
  73. return timestamp;
  74. }
  75. var format = 'ddd MMM DD YYYY';
  76. var date = moment((new Date(timestamp)).toISOString().replace('Z', '')).format(format);
  77. var today = moment((new Date()).toISOString().replace('Z', '')).format(format);
  78. if (date === today) {
  79. return 'Today ' + (new Date(timestamp)).toLocaleTimeString();
  80. }
  81. return date;
  82. },
  83. /**
  84. * Convert starTimestamp to 'DAY_OF_THE_WEEK, MONTH DAY, YEAR HOURS:MINUTES', except for the case: year equals 1969
  85. *
  86. * @param {string} startTimestamp
  87. * @return {string} startTimeSummary
  88. * @method startTime
  89. */
  90. startTime: function (startTimestamp) {
  91. if (!validator.isValidInt(startTimestamp)) {
  92. return '';
  93. }
  94. var startDate = new Date(startTimestamp);
  95. var months = this.dateMonths;
  96. var days = this.dateDays;
  97. // generate start time
  98. if (startDate.getFullYear() == 1969 || startTimestamp < 1) {
  99. return 'Not started';
  100. }
  101. var startTimeSummary = '';
  102. if (new Date(startTimestamp).setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { //today
  103. startTimeSummary = 'Today ' + this.dateFormatZeroFirst(startDate.getHours()) + ':' + this.dateFormatZeroFirst(startDate.getMinutes());
  104. } else {
  105. startTimeSummary = days[startDate.getDay()] + ' ' + months[startDate.getMonth()] + ' ' +
  106. this.dateFormatZeroFirst(startDate.getDate()) + ' ' + startDate.getFullYear() + ' '
  107. + this.dateFormatZeroFirst(startDate.getHours()) + ':' + this.dateFormatZeroFirst(startDate.getMinutes());
  108. }
  109. return startTimeSummary;
  110. },
  111. /**
  112. * Provides the duration between the given start and end timestamp. If start time
  113. * not valid, duration will be ''. If end time is not valid, duration will
  114. * be till now, showing 'Lasted for xxx secs'.
  115. *
  116. * @param {string} startTimestamp
  117. * @param {string} endTimestamp
  118. * @return {string} durationSummary
  119. * @method durationSummary
  120. */
  121. durationSummary: function (startTimestamp, endTimestamp) {
  122. // generate duration
  123. var durationSummary = '';
  124. var startDate = new Date(startTimestamp);
  125. var endDate = new Date(endTimestamp);
  126. var self = this;
  127. if (startDate.getFullYear() == 1969 || startTimestamp < 1) {
  128. // not started
  129. return Em.I18n.t('common.na');
  130. }
  131. if (endDate.getFullYear() != 1969 && endTimestamp > 0) {
  132. return '' + this.timingFormat(endTimestamp - startTimestamp, 1); //lasted for xx secs
  133. } else {
  134. // still running, duration till now
  135. var time = (App.dateTime() - startTimestamp) < 0 ? 0 : (App.dateTime() - startTimestamp);
  136. durationSummary = '' + this.timingFormat(time, 1);
  137. }
  138. return durationSummary;
  139. },
  140. /**
  141. * Convert time in mseconds to
  142. * 30 ms = 30 ms
  143. * 300 ms = 300 ms
  144. * 999 ms = 999 ms
  145. * 1000 ms = 1.00 secs
  146. * 3000 ms = 3.00 secs
  147. * 35000 ms = 35.00 secs
  148. * 350000 ms = 350.00 secs
  149. * 999999 ms = 999.99 secs
  150. * 1000000 ms = 16.66 mins
  151. * 3500000 secs = 58.33 mins
  152. *
  153. * @param {number} time
  154. * @param {bool} zeroValid for the case to show 0 when time is 0, not null
  155. * @return {string|null} formatted date
  156. * @method timingFormat
  157. */
  158. timingFormat: function (time, /* optional */ zeroValid) {
  159. var intTime = parseInt(time);
  160. if (zeroValid && intTime == 0) {
  161. return 0 + ' secs';
  162. }
  163. if (!intTime) {
  164. return null;
  165. }
  166. var timeStr = intTime.toString();
  167. var lengthOfNumber = timeStr.length;
  168. var oneMinMs = 60000;
  169. var oneHourMs = 3600000;
  170. var oneDayMs = 86400000;
  171. if (lengthOfNumber < 4) {
  172. return time + ' ms';
  173. } else if (lengthOfNumber < 7) {
  174. time = (time / 1000).toFixed(2);
  175. return time + ' secs';
  176. } else if (time < oneHourMs) {
  177. time = (time / oneMinMs).toFixed(2);
  178. return time + ' mins';
  179. } else if (time < oneDayMs) {
  180. time = (time / oneHourMs).toFixed(2);
  181. return time + ' hours';
  182. } else {
  183. time = (time / oneDayMs).toFixed(2);
  184. return time + ' days';
  185. }
  186. },
  187. /**
  188. * Provides the duration between the given start and end time. If start time
  189. * is not given, duration will be 0. If end time is not given, duration will
  190. * be till now.
  191. *
  192. * @param {Number} startTime Start time from epoch
  193. * @param {Number} endTime End time from epoch
  194. * @return {Number} duration
  195. * @method duration
  196. */
  197. duration: function (startTime, endTime) {
  198. var duration = 0;
  199. if (startTime && startTime > 0) {
  200. if (!endTime || endTime < 1) {
  201. endTime = App.dateTime();
  202. }
  203. duration = endTime - startTime;
  204. }
  205. return duration;
  206. }
  207. };