date.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /**
  2. * DevExtreme (localization/date.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var dependencyInjector = require("../core/utils/dependency_injector");
  11. var isString = require("../core/utils/type").isString;
  12. var iteratorUtils = require("../core/utils/iterator");
  13. var inArray = require("../core/utils/array").inArray;
  14. var getLDMLDateFormatter = require("./ldml/date.formatter").getFormatter;
  15. var getLDMLDateFormat = require("./ldml/date.format").getFormat;
  16. var getLDMLDateParser = require("./ldml/date.parser").getParser;
  17. var defaultDateNames = require("./default_date_names");
  18. var numberLocalization = require("./number");
  19. var errors = require("../core/errors");
  20. require("./core");
  21. var FORMATS_TO_PATTERN_MAP = {
  22. shortdate: "M/d/y",
  23. shorttime: "h:mm a",
  24. longdate: "EEEE, MMMM d, y",
  25. longtime: "h:mm:ss a",
  26. monthandday: "MMMM d",
  27. monthandyear: "MMMM y",
  28. quarterandyear: "QQQ y",
  29. day: "d",
  30. year: "y",
  31. shortdateshorttime: "M/d/y, h:mm a",
  32. mediumdatemediumtime: "MMMM d, h:mm a",
  33. longdatelongtime: "EEEE, MMMM d, y, h:mm:ss a",
  34. month: "LLLL",
  35. shortyear: "yy",
  36. dayofweek: "EEEE",
  37. quarter: "QQQ",
  38. hour: "HH",
  39. minute: "mm",
  40. second: "ss",
  41. millisecond: "SSS",
  42. "datetime-local": "yyyy-MM-ddTHH':'mm':'ss"
  43. };
  44. var possiblePartPatterns = {
  45. year: ["y", "yy", "yyyy"],
  46. day: ["d", "dd"],
  47. month: ["M", "MM", "MMM", "MMMM"],
  48. hours: ["H", "HH", "h", "hh", "ah"],
  49. minutes: ["m", "mm"],
  50. seconds: ["s", "ss"],
  51. milliseconds: ["S", "SS", "SSS"]
  52. };
  53. var dateLocalization = dependencyInjector({
  54. _getPatternByFormat: function(format) {
  55. return FORMATS_TO_PATTERN_MAP[format.toLowerCase()]
  56. },
  57. _expandPattern: function(pattern) {
  58. return this._getPatternByFormat(pattern) || pattern
  59. },
  60. formatUsesMonthName: function(format) {
  61. return this._expandPattern(format).indexOf("MMMM") !== -1
  62. },
  63. formatUsesDayName: function(format) {
  64. return this._expandPattern(format).indexOf("EEEE") !== -1
  65. },
  66. getFormatParts: function(format) {
  67. var pattern = this._getPatternByFormat(format) || format;
  68. var result = [];
  69. iteratorUtils.each(pattern.split(/\W+/), function(_, formatPart) {
  70. iteratorUtils.each(possiblePartPatterns, function(partName, possiblePatterns) {
  71. if (inArray(formatPart, possiblePatterns) > -1) {
  72. result.push(partName)
  73. }
  74. })
  75. });
  76. return result
  77. },
  78. getMonthNames: function(format) {
  79. return defaultDateNames.getMonthNames(format)
  80. },
  81. getDayNames: function(format) {
  82. return defaultDateNames.getDayNames(format)
  83. },
  84. getQuarterNames: function(format) {
  85. return defaultDateNames.getQuarterNames(format)
  86. },
  87. getPeriodNames: function(format) {
  88. return defaultDateNames.getPeriodNames(format)
  89. },
  90. getTimeSeparator: function() {
  91. return ":"
  92. },
  93. is24HourFormat: function(format) {
  94. var amTime = new Date(2017, 0, 20, 11, 0, 0, 0);
  95. var pmTime = new Date(2017, 0, 20, 23, 0, 0, 0);
  96. var amTimeFormatted = this.format(amTime, format);
  97. var pmTimeFormatted = this.format(pmTime, format);
  98. for (var i = 0; i < amTimeFormatted.length; i++) {
  99. if (amTimeFormatted[i] !== pmTimeFormatted[i]) {
  100. return !isNaN(parseInt(amTimeFormatted[i]))
  101. }
  102. }
  103. },
  104. format: function(date, _format) {
  105. if (!date) {
  106. return
  107. }
  108. if (!_format) {
  109. return date
  110. }
  111. var formatter;
  112. if ("function" === typeof _format) {
  113. formatter = _format
  114. } else {
  115. if (_format.formatter) {
  116. formatter = _format.formatter
  117. } else {
  118. _format = _format.type || _format;
  119. if (isString(_format)) {
  120. _format = FORMATS_TO_PATTERN_MAP[_format.toLowerCase()] || _format;
  121. return numberLocalization.convertDigits(getLDMLDateFormatter(_format, this)(date))
  122. }
  123. }
  124. }
  125. if (!formatter) {
  126. return
  127. }
  128. return formatter(date)
  129. },
  130. parse: function(text, format) {
  131. var that = this;
  132. var ldmlFormat;
  133. if (!text) {
  134. return
  135. }
  136. if (!format) {
  137. return this.parse(text, "shortdate")
  138. }
  139. if (format.parser) {
  140. return format.parser(text)
  141. }
  142. if ("string" === typeof format && !FORMATS_TO_PATTERN_MAP[format.toLowerCase()]) {
  143. ldmlFormat = format
  144. } else {
  145. var formatter = function(value) {
  146. var text = that.format(value, format);
  147. return numberLocalization.convertDigits(text, true)
  148. };
  149. try {
  150. ldmlFormat = getLDMLDateFormat(formatter)
  151. } catch (e) {}
  152. }
  153. if (ldmlFormat) {
  154. text = numberLocalization.convertDigits(text, true);
  155. return getLDMLDateParser(ldmlFormat, this)(text)
  156. }
  157. errors.log("W0012");
  158. var result = new Date(text);
  159. if (!result || isNaN(result.getTime())) {
  160. return
  161. }
  162. return result
  163. },
  164. firstDayOfWeekIndex: function() {
  165. return 0
  166. }
  167. });
  168. module.exports = dateLocalization;