You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dateUtils.js 5.9 KiB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.defaultUtils = undefined;
  6. exports.dateTimeFormat = dateTimeFormat;
  7. exports.getYear = getYear;
  8. exports.setYear = setYear;
  9. exports.addDays = addDays;
  10. exports.addMonths = addMonths;
  11. exports.addYears = addYears;
  12. exports.cloneDate = cloneDate;
  13. exports.cloneAsDate = cloneAsDate;
  14. exports.getDaysInMonth = getDaysInMonth;
  15. exports.getFirstDayOfMonth = getFirstDayOfMonth;
  16. exports.getFirstDayOfWeek = getFirstDayOfWeek;
  17. exports.getWeekArray = getWeekArray;
  18. exports.localizedWeekday = localizedWeekday;
  19. exports.formatIso = formatIso;
  20. exports.isEqualDate = isEqualDate;
  21. exports.isBeforeDate = isBeforeDate;
  22. exports.isAfterDate = isAfterDate;
  23. exports.isBetweenDates = isBetweenDates;
  24. exports.monthDiff = monthDiff;
  25. exports.yearDiff = yearDiff;
  26. var _warning = require('warning');
  27. var _warning2 = _interopRequireDefault(_warning);
  28. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  29. var dayAbbreviation = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
  30. var dayList = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
  31. var monthList = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  32. var monthLongList = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
  33. function dateTimeFormat(locale, options) {
  34. process.env.NODE_ENV !== "production" ? (0, _warning2.default)(locale === 'en-US', 'Material-UI: The ' + locale + ' locale is not supported by the built-in DateTimeFormat.\n Use the `DateTimeFormat` prop to supply an alternative implementation.') : void 0;
  35. this.format = function (date) {
  36. if (options.month === 'short' && options.weekday === 'short' && options.day === '2-digit') {
  37. return dayList[date.getDay()] + ', ' + monthList[date.getMonth()] + ' ' + date.getDate();
  38. } else if (options.year === 'numeric' && options.month === 'numeric' && options.day === 'numeric') {
  39. return date.getMonth() + 1 + '/' + date.getDate() + '/' + date.getFullYear();
  40. } else if (options.year === 'numeric' && options.month === 'long') {
  41. return monthLongList[date.getMonth()] + ' ' + date.getFullYear();
  42. } else if (options.weekday === 'narrow') {
  43. return dayAbbreviation[date.getDay()];
  44. } else if (options.year === 'numeric') {
  45. return date.getFullYear().toString();
  46. } else if (options.day === 'numeric') {
  47. return date.getDate();
  48. } else {
  49. process.env.NODE_ENV !== "production" ? (0, _warning2.default)(false, 'Material-UI: Wrong usage of DateTimeFormat') : void 0;
  50. }
  51. };
  52. }
  53. function getYear(d) {
  54. return d.getFullYear();
  55. }
  56. function setYear(d, year) {
  57. var newDate = cloneDate(d);
  58. newDate.setFullYear(year);
  59. return newDate;
  60. }
  61. function addDays(d, days) {
  62. var newDate = cloneDate(d);
  63. newDate.setDate(d.getDate() + days);
  64. return newDate;
  65. }
  66. function addMonths(d, months) {
  67. var newDate = cloneDate(d);
  68. newDate.setMonth(d.getMonth() + months);
  69. return newDate;
  70. }
  71. function addYears(d, years) {
  72. var newDate = cloneDate(d);
  73. newDate.setFullYear(d.getFullYear() + years);
  74. return newDate;
  75. }
  76. function cloneDate(d) {
  77. return new Date(d.getTime());
  78. }
  79. function cloneAsDate(d) {
  80. var clonedDate = cloneDate(d);
  81. clonedDate.setHours(0, 0, 0, 0);
  82. return clonedDate;
  83. }
  84. function getDaysInMonth(d) {
  85. var resultDate = getFirstDayOfMonth(d);
  86. resultDate.setMonth(resultDate.getMonth() + 1);
  87. resultDate.setDate(resultDate.getDate() - 1);
  88. return resultDate.getDate();
  89. }
  90. function getFirstDayOfMonth(d) {
  91. return new Date(d.getFullYear(), d.getMonth(), 1);
  92. }
  93. function getFirstDayOfWeek() {
  94. var now = new Date();
  95. return new Date(now.setDate(now.getDate() - now.getDay()));
  96. }
  97. function getWeekArray(d, firstDayOfWeek) {
  98. var dayArray = [];
  99. var daysInMonth = getDaysInMonth(d);
  100. var weekArray = [];
  101. var week = [];
  102. for (var i = 1; i <= daysInMonth; i++) {
  103. dayArray.push(new Date(d.getFullYear(), d.getMonth(), i));
  104. }
  105. var addWeek = function addWeek(week) {
  106. var emptyDays = 7 - week.length;
  107. for (var _i = 0; _i < emptyDays; ++_i) {
  108. week[weekArray.length ? 'push' : 'unshift'](null);
  109. }
  110. weekArray.push(week);
  111. };
  112. dayArray.forEach(function (day) {
  113. if (week.length > 0 && day.getDay() === firstDayOfWeek) {
  114. addWeek(week);
  115. week = [];
  116. }
  117. week.push(day);
  118. if (dayArray.indexOf(day) === dayArray.length - 1) {
  119. addWeek(week);
  120. }
  121. });
  122. return weekArray;
  123. }
  124. function localizedWeekday(DateTimeFormat, locale, day, firstDayOfWeek) {
  125. var weekdayFormatter = new DateTimeFormat(locale, { weekday: 'narrow' });
  126. var firstDayDate = getFirstDayOfWeek();
  127. return weekdayFormatter.format(addDays(firstDayDate, day + firstDayOfWeek));
  128. }
  129. // Convert date to ISO 8601 (YYYY-MM-DD) date string, accounting for current timezone
  130. function formatIso(date) {
  131. return new Date(date.toDateString() + ' 12:00:00 +0000').toISOString().substring(0, 10);
  132. }
  133. function isEqualDate(d1, d2) {
  134. return d1 && d2 && d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate();
  135. }
  136. function isBeforeDate(d1, d2) {
  137. var date1 = cloneAsDate(d1);
  138. var date2 = cloneAsDate(d2);
  139. return date1.getTime() < date2.getTime();
  140. }
  141. function isAfterDate(d1, d2) {
  142. var date1 = cloneAsDate(d1);
  143. var date2 = cloneAsDate(d2);
  144. return date1.getTime() > date2.getTime();
  145. }
  146. function isBetweenDates(dateToCheck, startDate, endDate) {
  147. return !isBeforeDate(dateToCheck, startDate) && !isAfterDate(dateToCheck, endDate);
  148. }
  149. function monthDiff(d1, d2) {
  150. var m = void 0;
  151. m = (d1.getFullYear() - d2.getFullYear()) * 12;
  152. m += d1.getMonth();
  153. m -= d2.getMonth();
  154. return m;
  155. }
  156. function yearDiff(d1, d2) {
  157. return ~~(monthDiff(d1, d2) / 12);
  158. }
  159. var defaultUtils = exports.defaultUtils = {
  160. getYear: getYear,
  161. setYear: setYear,
  162. addDays: addDays,
  163. addMonths: addMonths,
  164. addYears: addYears,
  165. getFirstDayOfMonth: getFirstDayOfMonth,
  166. getWeekArray: getWeekArray,
  167. monthDiff: monthDiff
  168. };