886790e253132600314d4c4291ef12a6f7bd55c3fb87b13acd71b7a4ad0c10fe5bc1265643f28440c7fa24ac0df1d7a6ee2d1e52fe61d91ddc6fba090dba73 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { addFormatToken } from '../format/format';
  2. import {
  3. addRegexToken,
  4. match1to2,
  5. match1to4,
  6. match1to6,
  7. match2,
  8. match4,
  9. match6,
  10. matchSigned,
  11. } from '../parse/regex';
  12. import { addWeekParseToken } from '../parse/token';
  13. import {
  14. weekOfYear,
  15. weeksInYear,
  16. dayOfYearFromWeeks,
  17. } from './week-calendar-utils';
  18. import toInt from '../utils/to-int';
  19. import { hooks } from '../utils/hooks';
  20. import { createUTCDate } from '../create/date-from-array';
  21. // FORMATTING
  22. addFormatToken(0, ['gg', 2], 0, function () {
  23. return this.weekYear() % 100;
  24. });
  25. addFormatToken(0, ['GG', 2], 0, function () {
  26. return this.isoWeekYear() % 100;
  27. });
  28. function addWeekYearFormatToken(token, getter) {
  29. addFormatToken(0, [token, token.length], 0, getter);
  30. }
  31. addWeekYearFormatToken('gggg', 'weekYear');
  32. addWeekYearFormatToken('ggggg', 'weekYear');
  33. addWeekYearFormatToken('GGGG', 'isoWeekYear');
  34. addWeekYearFormatToken('GGGGG', 'isoWeekYear');
  35. // ALIASES
  36. // PARSING
  37. addRegexToken('G', matchSigned);
  38. addRegexToken('g', matchSigned);
  39. addRegexToken('GG', match1to2, match2);
  40. addRegexToken('gg', match1to2, match2);
  41. addRegexToken('GGGG', match1to4, match4);
  42. addRegexToken('gggg', match1to4, match4);
  43. addRegexToken('GGGGG', match1to6, match6);
  44. addRegexToken('ggggg', match1to6, match6);
  45. addWeekParseToken(
  46. ['gggg', 'ggggg', 'GGGG', 'GGGGG'],
  47. function (input, week, config, token) {
  48. week[token.substr(0, 2)] = toInt(input);
  49. }
  50. );
  51. addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
  52. week[token] = hooks.parseTwoDigitYear(input);
  53. });
  54. // MOMENTS
  55. export function getSetWeekYear(input) {
  56. return getSetWeekYearHelper.call(
  57. this,
  58. input,
  59. this.week(),
  60. this.weekday() + this.localeData()._week.dow,
  61. this.localeData()._week.dow,
  62. this.localeData()._week.doy
  63. );
  64. }
  65. export function getSetISOWeekYear(input) {
  66. return getSetWeekYearHelper.call(
  67. this,
  68. input,
  69. this.isoWeek(),
  70. this.isoWeekday(),
  71. 1,
  72. 4
  73. );
  74. }
  75. export function getISOWeeksInYear() {
  76. return weeksInYear(this.year(), 1, 4);
  77. }
  78. export function getISOWeeksInISOWeekYear() {
  79. return weeksInYear(this.isoWeekYear(), 1, 4);
  80. }
  81. export function getWeeksInYear() {
  82. var weekInfo = this.localeData()._week;
  83. return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
  84. }
  85. export function getWeeksInWeekYear() {
  86. var weekInfo = this.localeData()._week;
  87. return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
  88. }
  89. function getSetWeekYearHelper(input, week, weekday, dow, doy) {
  90. var weeksTarget;
  91. if (input == null) {
  92. return weekOfYear(this, dow, doy).year;
  93. } else {
  94. weeksTarget = weeksInYear(input, dow, doy);
  95. if (week > weeksTarget) {
  96. week = weeksTarget;
  97. }
  98. return setWeekAll.call(this, input, week, weekday, dow, doy);
  99. }
  100. }
  101. function setWeekAll(weekYear, week, weekday, dow, doy) {
  102. var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
  103. date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
  104. this.year(date.getUTCFullYear());
  105. this.month(date.getUTCMonth());
  106. this.date(date.getUTCDate());
  107. return this;
  108. }