ts-time-utils 4.0.1 → 4.4.0

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.
Files changed (81) hide show
  1. package/README.md +175 -30
  2. package/dist/{age.js → age.cjs} +14 -6
  3. package/dist/{calculate.js → calculate.cjs} +30 -18
  4. package/dist/{calendar.js → calendar.cjs} +80 -39
  5. package/dist/{calendars.js → calendars.cjs} +48 -23
  6. package/dist/{chain.js → chain.cjs} +41 -40
  7. package/dist/{compare.js → compare.cjs} +58 -28
  8. package/dist/constants.cjs +19 -0
  9. package/dist/{countdown.js → countdown.cjs} +16 -7
  10. package/dist/{cron.js → cron.cjs} +20 -9
  11. package/dist/{dateRange.js → dateRange.cjs} +42 -26
  12. package/dist/{duration.js → duration.cjs} +56 -44
  13. package/dist/esm/chain.js +0 -5
  14. package/dist/esm/finance.d.ts +236 -0
  15. package/dist/esm/finance.d.ts.map +1 -0
  16. package/dist/esm/finance.js +495 -0
  17. package/dist/esm/healthcare.d.ts +260 -0
  18. package/dist/esm/healthcare.d.ts.map +1 -0
  19. package/dist/esm/healthcare.js +447 -0
  20. package/dist/esm/index.d.ts +6 -0
  21. package/dist/esm/index.d.ts.map +1 -1
  22. package/dist/esm/index.js +6 -0
  23. package/dist/esm/naturalLanguage.d.ts +1 -3
  24. package/dist/esm/naturalLanguage.d.ts.map +1 -1
  25. package/dist/esm/naturalLanguage.js +9 -2
  26. package/dist/esm/plugins.d.ts +0 -6
  27. package/dist/esm/plugins.d.ts.map +1 -1
  28. package/dist/esm/plugins.js +36 -42
  29. package/dist/esm/recurrence.d.ts.map +1 -1
  30. package/dist/esm/recurrence.js +3 -5
  31. package/dist/esm/scheduling.d.ts +206 -0
  32. package/dist/esm/scheduling.d.ts.map +1 -0
  33. package/dist/esm/scheduling.js +329 -0
  34. package/dist/esm/timezone.d.ts +6 -1
  35. package/dist/esm/timezone.d.ts.map +1 -1
  36. package/dist/esm/timezone.js +106 -66
  37. package/dist/esm/types.d.ts +0 -4
  38. package/dist/esm/types.d.ts.map +1 -1
  39. package/dist/finance.cjs +512 -0
  40. package/dist/finance.d.ts +236 -0
  41. package/dist/finance.d.ts.map +1 -0
  42. package/dist/{fiscal.js → fiscal.cjs} +36 -17
  43. package/dist/{format.js → format.cjs} +83 -70
  44. package/dist/healthcare.cjs +462 -0
  45. package/dist/healthcare.d.ts +260 -0
  46. package/dist/healthcare.d.ts.map +1 -0
  47. package/dist/{holidays.js → holidays.cjs} +52 -25
  48. package/dist/index.cjs +595 -0
  49. package/dist/index.d.ts +6 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/{interval.js → interval.cjs} +24 -11
  52. package/dist/{iterate.js → iterate.cjs} +84 -41
  53. package/dist/{locale.js → locale.cjs} +54 -26
  54. package/dist/{naturalLanguage.js → naturalLanguage.cjs} +36 -23
  55. package/dist/naturalLanguage.d.ts +1 -3
  56. package/dist/naturalLanguage.d.ts.map +1 -1
  57. package/dist/{parse.js → parse.cjs} +24 -11
  58. package/dist/{performance.js → performance.cjs} +23 -10
  59. package/dist/{plugins.js → plugins.cjs} +48 -47
  60. package/dist/plugins.d.ts +0 -6
  61. package/dist/plugins.d.ts.map +1 -1
  62. package/dist/{precision.js → precision.cjs} +74 -37
  63. package/dist/{rangePresets.js → rangePresets.cjs} +40 -19
  64. package/dist/{recurrence.js → recurrence.cjs} +27 -21
  65. package/dist/recurrence.d.ts.map +1 -1
  66. package/dist/scheduling.cjs +344 -0
  67. package/dist/scheduling.d.ts +206 -0
  68. package/dist/scheduling.d.ts.map +1 -0
  69. package/dist/{serialize.js → serialize.cjs} +36 -17
  70. package/dist/{temporal.js → temporal.cjs} +28 -13
  71. package/dist/{timezone.js → timezone.cjs} +140 -82
  72. package/dist/timezone.d.ts +6 -1
  73. package/dist/timezone.d.ts.map +1 -1
  74. package/dist/{types.js → types.cjs} +9 -3
  75. package/dist/types.d.ts +0 -4
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/{validate.js → validate.cjs} +54 -26
  78. package/dist/{workingHours.js → workingHours.cjs} +36 -17
  79. package/package.json +52 -34
  80. package/dist/constants.js +0 -16
  81. package/dist/index.js +0 -66
@@ -0,0 +1,236 @@
1
+ /**
2
+ * @fileoverview Finance utilities for market-aware date calculations
3
+ * Provides US market hours, trading days, settlement dates, and options expiration
4
+ */
5
+ import type { DateInput } from './types.js';
6
+ /** Supported US stock markets */
7
+ export type USMarket = 'NYSE' | 'NASDAQ';
8
+ /** Market trading hours configuration */
9
+ export interface MarketHours {
10
+ /** Regular market open time */
11
+ open: {
12
+ hour: number;
13
+ minute: number;
14
+ };
15
+ /** Regular market close time */
16
+ close: {
17
+ hour: number;
18
+ minute: number;
19
+ };
20
+ /** Market timezone */
21
+ timezone: string;
22
+ /** Pre-market open time (optional) */
23
+ preMarket?: {
24
+ hour: number;
25
+ minute: number;
26
+ };
27
+ /** After-hours close time (optional) */
28
+ afterHours?: {
29
+ hour: number;
30
+ minute: number;
31
+ };
32
+ }
33
+ /** Options expiration type */
34
+ export type OptionsExpirationType = 'monthly' | 'weekly' | 'quarterly';
35
+ /** Market hours for US exchanges */
36
+ export declare const MARKET_HOURS: Record<USMarket, MarketHours>;
37
+ /** US market holidays (NYSE/NASDAQ follow same schedule) */
38
+ export declare const US_MARKET_HOLIDAYS: readonly ["New Year's Day", "Martin Luther King Jr. Day", "Presidents' Day", "Good Friday", "Memorial Day", "Juneteenth", "Independence Day", "Labor Day", "Thanksgiving Day", "Christmas Day"];
39
+ /**
40
+ * Check if a date is a US market holiday
41
+ * @param date - Date to check
42
+ * @param market - Market (default: NYSE)
43
+ * @returns True if the date is a market holiday
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * isMarketHoliday(new Date('2024-12-25')); // true (Christmas)
48
+ * isMarketHoliday(new Date('2024-01-02')); // false
49
+ * ```
50
+ */
51
+ export declare function isMarketHoliday(date: DateInput, market?: USMarket): boolean;
52
+ /**
53
+ * Check if a date is a trading day (weekday and not a market holiday)
54
+ * @param date - Date to check
55
+ * @param market - Market (default: NYSE)
56
+ * @returns True if the date is a trading day
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * isTradingDay(new Date('2024-01-15')); // true (Monday)
61
+ * isTradingDay(new Date('2024-01-13')); // false (Saturday)
62
+ * ```
63
+ */
64
+ export declare function isTradingDay(date: DateInput, market?: USMarket): boolean;
65
+ /**
66
+ * Check if the market is currently open
67
+ * @param date - Date/time to check
68
+ * @param market - Market (default: NYSE)
69
+ * @returns True if market is open at the specified time
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * // Check if NYSE is open now
74
+ * isMarketOpen(new Date(), 'NYSE');
75
+ *
76
+ * // Check specific time
77
+ * isMarketOpen(new Date('2024-01-15T10:30:00-05:00')); // true
78
+ * ```
79
+ */
80
+ export declare function isMarketOpen(date: DateInput, market?: USMarket): boolean;
81
+ /**
82
+ * Get market hours configuration
83
+ * @param market - Market (default: NYSE)
84
+ * @returns Market hours configuration (deep copy)
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * const hours = getMarketHours('NASDAQ');
89
+ * console.log(hours.open); // { hour: 9, minute: 30 }
90
+ * ```
91
+ */
92
+ export declare function getMarketHours(market?: USMarket): MarketHours;
93
+ /**
94
+ * Get market open time for a specific date
95
+ * @param date - Date to get market open for
96
+ * @param market - Market (default: NYSE)
97
+ * @returns Date set to market open time
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * const open = getMarketOpen(new Date('2024-01-15'));
102
+ * console.log(open); // 2024-01-15T09:30:00
103
+ * ```
104
+ */
105
+ export declare function getMarketOpen(date: DateInput, market?: USMarket): Date;
106
+ /**
107
+ * Get market close time for a specific date
108
+ * @param date - Date to get market close for
109
+ * @param market - Market (default: NYSE)
110
+ * @returns Date set to market close time
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * const close = getMarketClose(new Date('2024-01-15'));
115
+ * console.log(close); // 2024-01-15T16:00:00
116
+ * ```
117
+ */
118
+ export declare function getMarketClose(date: DateInput, market?: USMarket): Date;
119
+ /**
120
+ * Get next market open time after a given date
121
+ * @param after - Start searching after this date
122
+ * @param market - Market (default: NYSE)
123
+ * @returns Next market open date/time
124
+ *
125
+ * @example
126
+ * ```ts
127
+ * // If it's Friday evening, returns Monday 9:30 AM
128
+ * const nextOpen = getNextMarketOpen(new Date('2024-01-12T17:00:00'));
129
+ * ```
130
+ */
131
+ export declare function getNextMarketOpen(after: DateInput, market?: USMarket): Date;
132
+ /**
133
+ * Get next market close time after a given date
134
+ * @param after - Start searching after this date
135
+ * @param market - Market (default: NYSE)
136
+ * @returns Next market close date/time
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const nextClose = getNextMarketClose(new Date('2024-01-15T10:00:00'));
141
+ * // Returns 2024-01-15T16:00:00 (same day close)
142
+ * ```
143
+ */
144
+ export declare function getNextMarketClose(after: DateInput, market?: USMarket): Date;
145
+ /**
146
+ * Calculate settlement date (T+N) from trade date
147
+ * @param tradeDate - Trade date
148
+ * @param days - Number of business days for settlement (e.g., 1 for T+1, 2 for T+2)
149
+ * @param market - Market (default: NYSE)
150
+ * @returns Settlement date
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * // T+2 settlement
155
+ * const settlement = getSettlementDate(new Date('2024-01-15'), 2);
156
+ * // Returns 2024-01-17 (skipping weekends/holidays)
157
+ * ```
158
+ */
159
+ export declare function getSettlementDate(tradeDate: DateInput, days: number, market?: USMarket): Date;
160
+ /**
161
+ * Calculate trade date from settlement date (reverse T+N)
162
+ * @param settlementDate - Settlement date
163
+ * @param days - Number of business days for settlement
164
+ * @param market - Market (default: NYSE)
165
+ * @returns Trade date
166
+ *
167
+ * @example
168
+ * ```ts
169
+ * const tradeDate = getTradeDateFromSettlement(new Date('2024-01-17'), 2);
170
+ * // Returns 2024-01-15
171
+ * ```
172
+ */
173
+ export declare function getTradeDateFromSettlement(settlementDate: DateInput, days: number, market?: USMarket): Date;
174
+ /**
175
+ * Iterate through each trading day in a range
176
+ * @param start - Start date
177
+ * @param end - End date
178
+ * @param market - Market (default: NYSE)
179
+ * @returns Array of trading days
180
+ *
181
+ * @example
182
+ * ```ts
183
+ * const days = eachTradingDay(new Date('2024-01-15'), new Date('2024-01-19'));
184
+ * // Returns Mon, Tue, Wed, Thu, Fri (if no holidays)
185
+ * ```
186
+ */
187
+ export declare function eachTradingDay(start: DateInput, end: DateInput, market?: USMarket): Date[];
188
+ /**
189
+ * Count trading days between two dates
190
+ * @param start - Start date
191
+ * @param end - End date
192
+ * @param market - Market (default: NYSE)
193
+ * @returns Number of trading days
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * const count = countTradingDays(new Date('2024-01-15'), new Date('2024-01-19'));
198
+ * // Returns 5 (Mon-Fri if no holidays)
199
+ * ```
200
+ */
201
+ export declare function countTradingDays(start: DateInput, end: DateInput, market?: USMarket): number;
202
+ /**
203
+ * Add trading days to a date
204
+ * @param date - Start date
205
+ * @param days - Number of trading days to add (can be negative)
206
+ * @param market - Market (default: NYSE)
207
+ * @returns Resulting date
208
+ *
209
+ * @example
210
+ * ```ts
211
+ * const result = addTradingDays(new Date('2024-01-15'), 5);
212
+ * // Returns 5 trading days later
213
+ * ```
214
+ */
215
+ export declare function addTradingDays(date: DateInput, days: number, market?: USMarket): Date;
216
+ /**
217
+ * Get options expiration date
218
+ * @param year - Year
219
+ * @param month - Month (1-12)
220
+ * @param type - Expiration type (default: 'monthly')
221
+ * @returns Options expiration date
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * // Monthly options expire on 3rd Friday
226
+ * const exp = getOptionsExpiration(2024, 1, 'monthly');
227
+ *
228
+ * // Weekly options expire every Friday
229
+ * const weekly = getOptionsExpiration(2024, 1, 'weekly');
230
+ *
231
+ * // Quarterly options expire on 3rd Friday of Mar, Jun, Sep, Dec
232
+ * const quarterly = getOptionsExpiration(2024, 3, 'quarterly');
233
+ * ```
234
+ */
235
+ export declare function getOptionsExpiration(year: number, month: number, type?: OptionsExpirationType): Date;
236
+ //# sourceMappingURL=finance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finance.d.ts","sourceRoot":"","sources":["../../src/finance.ts"],"names":[],"mappings":"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"}