@tmlmobilidade/dates 20260616.1147.27 → 20260616.2238.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dates.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { type DatesFormat } from './lib/date-format.js';
2
2
  import { type TimezoneIdentified } from './lib/timezone-identified.js';
3
- import { type OperationalDate, type UnixTimestamp } from '@tmlmobilidade/types';
3
+ import { CalendarDate, type OperationalDate, type UnixTimestamp } from '@tmlmobilidade/types';
4
4
  import { type DateObjectUnits, type DateTimeUnit, type DurationObjectUnits } from 'luxon';
5
5
  interface DatesConstructor {
6
+ calendar_date: CalendarDate;
6
7
  iso: null | string;
7
8
  js_date: Date;
8
9
  operational_date: OperationalDate;
@@ -20,7 +21,17 @@ export interface CalendarEntry {
20
21
  period: '1' | '2' | '3';
21
22
  }
22
23
  export declare class Dates {
23
- static readonly STANDARD_WINDOW_HOURS = 10;
24
+ static readonly standardWindowHours = 10;
25
+ calendar_date: CalendarDate;
26
+ iso: null | string;
27
+ js_date: Date;
28
+ operational_date: OperationalDate;
29
+ std_window: {
30
+ end: UnixTimestamp;
31
+ start: UnixTimestamp;
32
+ };
33
+ unix_timestamp: UnixTimestamp;
34
+ constructor(params: DatesConstructor);
24
35
  static get FORMATS(): {
25
36
  DATE_FULL: DatesFormat;
26
37
  DATE_FULL_WITH_YEAR: DatesFormat;
@@ -39,15 +50,6 @@ export declare class Dates {
39
50
  };
40
51
  static get TIMEZONE_LIST(): readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Algiers", "Africa/Bissau", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/El_Aaiun", "Africa/Johannesburg", "Africa/Juba", "Africa/Khartoum", "Africa/Lagos", "Africa/Maputo", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Asuncion", "America/Atikokan", "America/Bahia_Banderas", "America/Bahia", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson_Creek", "America/Dawson", "America/Denver", "America/Detroit", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Goose_Bay", "America/Grand_Turk", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Maceio", "America/Managua", "America/Manaus", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port_of_Spain", "America/Port-au-Prince", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Johns", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Helsinki", "Europe/Istanbul", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Paris", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/Saratov", "Europe/Simferopol", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis"];
41
52
  static get TIMEZONE_LIST_VALUES(): import("zod").Values<["Africa/Abidjan", "Africa/Accra", "Africa/Algiers", "Africa/Bissau", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/El_Aaiun", "Africa/Johannesburg", "Africa/Juba", "Africa/Khartoum", "Africa/Lagos", "Africa/Maputo", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Asuncion", "America/Atikokan", "America/Bahia_Banderas", "America/Bahia", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson_Creek", "America/Dawson", "America/Denver", "America/Detroit", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Goose_Bay", "America/Grand_Turk", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Maceio", "America/Managua", "America/Manaus", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota", "America/Nuuk", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port_of_Spain", "America/Port-au-Prince", "America/Porto_Velho", "America/Puerto_Rico", "America/Punta_Arenas", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Johns", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Atyrau", "Asia/Baghdad", "Asia/Baku", "Asia/Bangkok", "Asia/Barnaul", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Famagusta", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qostanay", "Asia/Qyzylorda", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Tomsk", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yangon", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Astrakhan", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Helsinki", "Europe/Istanbul", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Kirov", "Europe/Lisbon", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Paris", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/Saratov", "Europe/Simferopol", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Ulyanovsk", "Europe/Uzhgorod", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis"]>;
42
- iso: null | string;
43
- js_date: Date;
44
- operational_date: OperationalDate;
45
- std_window: {
46
- end: UnixTimestamp;
47
- start: UnixTimestamp;
48
- };
49
- unix_timestamp: UnixTimestamp;
50
- constructor({ iso, js_date, operational_date, std_window, unix_timestamp }: DatesConstructor);
51
53
  /**
52
54
  * Creates a Dates object from a date/time string in a specific format.
53
55
  * @param text The date/time string to parse.
package/dist/dates.js CHANGED
@@ -1,34 +1,28 @@
1
- /* * */
2
- import { FORMATS, OPERATIONAL_DATE_FORMAT } from './lib/date-format.js';
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { CALENDAR_DATE_FORMAT, FORMATS, OPERATIONAL_DATE_FORMAT } from './lib/date-format.js';
3
3
  import { TimezoneIdentifiedSchema, TimezoneIdentifiedValues } from './lib/timezone-identified.js';
4
4
  import { DateTime } from 'luxon';
5
5
  /* * */
6
6
  export class Dates {
7
7
  //
8
- //
9
- // Static properties
10
- static STANDARD_WINDOW_HOURS = 10;
11
- static get FORMATS() { return FORMATS; }
12
- static get TIMEZONE_LIST() { return TimezoneIdentifiedValues; }
13
- static get TIMEZONE_LIST_VALUES() { return TimezoneIdentifiedSchema.Values; }
14
- //
15
- // Instance properties
8
+ static standardWindowHours = 10;
9
+ calendar_date;
16
10
  iso;
17
11
  js_date;
18
12
  operational_date;
19
13
  std_window;
20
14
  unix_timestamp;
21
- //
22
- // Constructor
23
- constructor({ iso, js_date, operational_date, std_window, unix_timestamp }) {
24
- this.iso = iso ?? null;
25
- this.js_date = js_date;
26
- this.operational_date = operational_date;
27
- this.std_window = std_window;
28
- this.unix_timestamp = unix_timestamp;
15
+ constructor(params) {
16
+ this.calendar_date = params.calendar_date;
17
+ this.iso = params.iso ?? null;
18
+ this.js_date = params.js_date;
19
+ this.operational_date = params.operational_date;
20
+ this.std_window = params.std_window;
21
+ this.unix_timestamp = params.unix_timestamp;
29
22
  }
30
- //
31
- // Static methods
23
+ static get FORMATS() { return FORMATS; }
24
+ static get TIMEZONE_LIST() { return TimezoneIdentifiedValues; }
25
+ static get TIMEZONE_LIST_VALUES() { return TimezoneIdentifiedSchema.Values; }
32
26
  /**
33
27
  * Creates a Dates object from a date/time string in a specific format.
34
28
  * @param text The date/time string to parse.
@@ -42,6 +36,7 @@ export class Dates {
42
36
  .fromFormat(text, format, { setZone: true })
43
37
  .setZone(timezone, { keepLocalTime: true });
44
38
  return new Dates({
39
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
45
40
  iso: dateTime.toISO(),
46
41
  js_date: dateTime.toJSDate(),
47
42
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -58,6 +53,7 @@ export class Dates {
58
53
  static fromISO(isoText) {
59
54
  const dateTime = DateTime.fromISO(isoText, { setZone: true });
60
55
  return new Dates({
56
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
61
57
  iso: dateTime.toISO(),
62
58
  js_date: dateTime.toJSDate(),
63
59
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -75,6 +71,7 @@ export class Dates {
75
71
  .fromJSDate(date)
76
72
  .setZone('utc', { keepLocalTime: false });
77
73
  return new Dates({
74
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
78
75
  iso: dateTime.toISO(),
79
76
  js_date: dateTime.toJSDate(),
80
77
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -94,6 +91,7 @@ export class Dates {
94
91
  .setZone(timezone, { keepLocalTime: true })
95
92
  .set({ hour: 4, millisecond: 0, minute: 0, second: 0 }); // Start of the operational date
96
93
  return new Dates({
94
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
97
95
  iso: dateTime.toISO(),
98
96
  js_date: dateTime.toJSDate(),
99
97
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -111,6 +109,7 @@ export class Dates {
111
109
  .fromSeconds(seconds)
112
110
  .setZone('utc', { keepLocalTime: false });
113
111
  return new Dates({
112
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
114
113
  iso: dateTime.toISO(),
115
114
  js_date: dateTime.toJSDate(),
116
115
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -128,6 +127,7 @@ export class Dates {
128
127
  .fromMillis(millis)
129
128
  .setZone('utc', { keepLocalTime: false });
130
129
  return new Dates({
130
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
131
131
  iso: dateTime.toISO(),
132
132
  js_date: dateTime.toJSDate(),
133
133
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -145,6 +145,7 @@ export class Dates {
145
145
  .now()
146
146
  .setZone(timezone, { keepLocalTime: false });
147
147
  return new Dates({
148
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
148
149
  iso: dateTime.toISO(),
149
150
  js_date: dateTime.toJSDate(),
150
151
  operational_date: this.prototype.getOperationalDate(dateTime.toISO()),
@@ -157,15 +158,15 @@ export class Dates {
157
158
  * Returns an empty array if the request fails
158
159
  */
159
160
  static async fetchCalendarData() {
160
- let calendarJson = [];
161
161
  try {
162
+ let calendarJson = [];
162
163
  const response = await fetch('https://go.carrismetropolitana.pt/api/dates/public');
163
164
  calendarJson = !response.ok ? [] : await response.json();
165
+ return calendarJson;
164
166
  }
165
167
  catch (error) {
166
168
  console.error('Error fetching calendar data:', error);
167
169
  }
168
- return calendarJson;
169
170
  }
170
171
  /**
171
172
  * Returns the difference between this date and another date.
@@ -192,6 +193,7 @@ export class Dates {
192
193
  .fromISO(this.iso, { setZone: true })
193
194
  .endOf(unit);
194
195
  return new Dates({
196
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
195
197
  iso: dateTime.toISO(),
196
198
  js_date: dateTime.toJSDate(),
197
199
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -211,6 +213,7 @@ export class Dates {
211
213
  .fromISO(this.iso, { setZone: true })
212
214
  .minus(duration);
213
215
  return new Dates({
216
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
214
217
  iso: dateTime.toISO(),
215
218
  js_date: dateTime.toJSDate(),
216
219
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -230,6 +233,7 @@ export class Dates {
230
233
  .fromISO(this.iso, { setZone: true })
231
234
  .plus(duration);
232
235
  return new Dates({
236
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
233
237
  iso: dateTime.toISO(),
234
238
  js_date: dateTime.toJSDate(),
235
239
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -249,6 +253,7 @@ export class Dates {
249
253
  .fromISO(this.iso, { setZone: true })
250
254
  .set(dateOrTime);
251
255
  return new Dates({
256
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
252
257
  iso: dateTime.toISO(),
253
258
  js_date: dateTime.toJSDate(),
254
259
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -271,6 +276,7 @@ export class Dates {
271
276
  .fromISO(this.iso, { setZone: true })
272
277
  .setZone(timezone, { keepLocalTime: method === 'rebase_utc' });
273
278
  return new Dates({
279
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
274
280
  iso: dateTime.toISO(),
275
281
  js_date: dateTime.toJSDate(),
276
282
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -290,6 +296,7 @@ export class Dates {
290
296
  .fromISO(this.iso, { setZone: true })
291
297
  .startOf(unit);
292
298
  return new Dates({
299
+ calendar_date: dateTime.toFormat(CALENDAR_DATE_FORMAT),
293
300
  iso: dateTime.toISO(),
294
301
  js_date: dateTime.toJSDate(),
295
302
  operational_date: this.getOperationalDate(dateTime.toISO()),
@@ -304,11 +311,14 @@ export class Dates {
304
311
  * @returns { minutes: number, hours: number, days: number }
305
312
  */
306
313
  timeUntil(unixTimestamp) {
314
+ // Calculate the difference in milliseconds
307
315
  const now = Date.now();
308
316
  const diffMs = unixTimestamp - now;
317
+ // Calculate the time remaining
309
318
  const minutes = diffMs / (1000 * 60);
310
319
  const hours = diffMs / (1000 * 60 * 60);
311
320
  const days = diffMs / (1000 * 60 * 60 * 24);
321
+ // Return the time components
312
322
  return { days, hours, minutes };
313
323
  }
314
324
  /**
@@ -364,36 +374,32 @@ export class Dates {
364
374
  dateTime.setLocale(locale);
365
375
  return dateTime.toLocaleString(format, { locale: locale });
366
376
  }
367
- //
368
- // Private methods
369
377
  /**
370
378
  * Returns the operational date based on the provided timestamp and format.
371
379
  * @param timestamp - The timestamp to be parsed.
372
380
  * @returns The operational date in the yyyyLLdd format.
373
381
  */
374
382
  getOperationalDate(isoDate) {
383
+ // Skip if the ISO date is not set
375
384
  if (!isoDate)
376
385
  throw new Error('ISO date is not set.');
377
- //
378
386
  // Get the date object
379
387
  const dateObject = DateTime.fromISO(isoDate, { setZone: true });
380
- //
381
388
  // Check if the time is between 00:00 and 03:59.
382
389
  // The operational date is between 04:00 and 03:59 of the following day.
383
390
  let operationalDate;
384
391
  if (dateObject.hour < 4) {
385
- // If true, return the previous day in the yyyyLLdd format
386
- const previousDay = dateObject.minus({ days: 1 });
392
+ // If true, unwind the clock by 12 hours to
393
+ // return the previous day in the yyyyLLdd format
394
+ const previousDay = dateObject.minus({ hours: 12 });
387
395
  operationalDate = previousDay.toFormat(OPERATIONAL_DATE_FORMAT);
388
396
  }
389
397
  else {
390
398
  // Else, return the current day in the yyyyLLdd format
391
399
  operationalDate = dateObject.toFormat(OPERATIONAL_DATE_FORMAT);
392
400
  }
393
- //
394
- // Validate the operational date and return it
401
+ // Return the date as an operational date
395
402
  return operationalDate;
396
- //
397
403
  }
398
404
  /**
399
405
  * This function returns the start and end of the standard window interval for a given timestamp.
@@ -407,8 +413,8 @@ export class Dates {
407
413
  throw new Error('ISO date is not set.');
408
414
  const dateTime = DateTime.fromISO(isoDate, { setZone: true });
409
415
  return {
410
- end: dateTime.plus({ hours: Dates.STANDARD_WINDOW_HOURS }).toMillis(),
411
- start: dateTime.minus({ hours: Dates.STANDARD_WINDOW_HOURS }).toMillis(),
416
+ end: dateTime.plus({ hours: Dates.standardWindowHours }).toMillis(),
417
+ start: dateTime.minus({ hours: Dates.standardWindowHours }).toMillis(),
412
418
  };
413
419
  }
414
420
  }
@@ -9,6 +9,7 @@ export interface DatesFormat {
9
9
  year?: '2-digit' | 'numeric';
10
10
  }
11
11
  export declare const OPERATIONAL_DATE_FORMAT = "yyyyMMdd";
12
+ export declare const CALENDAR_DATE_FORMAT = "yyyy-MM-dd";
12
13
  export declare const FORMATS: {
13
14
  DATE_FULL: DatesFormat;
14
15
  DATE_FULL_WITH_YEAR: DatesFormat;
@@ -82,6 +82,7 @@ const DATETIME_FULL_WITH_SECONDS = {
82
82
  year: n,
83
83
  };
84
84
  export const OPERATIONAL_DATE_FORMAT = 'yyyyMMdd';
85
+ export const CALENDAR_DATE_FORMAT = 'yyyy-MM-dd';
85
86
  export const FORMATS = {
86
87
  DATE_FULL,
87
88
  DATE_FULL_WITH_YEAR,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmlmobilidade/dates",
3
- "version": "20260616.1147.27",
3
+ "version": "20260616.2238.2",
4
4
  "author": {
5
5
  "email": "iso@tmlmobilidade.pt",
6
6
  "name": "TML-ISO"