@gobrand/tiempo 2.3.2 → 2.3.3
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/README.md +41 -0
- package/dist/chunk-3A6X6WV5.js +186 -0
- package/dist/chunk-3A6X6WV5.js.map +1 -0
- package/dist/formatPlainDate.d.ts +29 -0
- package/dist/formatPlainDate.d.ts.map +1 -0
- package/dist/formatPlainDate.js +7 -0
- package/dist/formatPlainDate.js.map +1 -0
- package/dist/formatPlainDate.test.d.ts +2 -0
- package/dist/formatPlainDate.test.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -314,6 +314,47 @@ format(instant, "yyyy-MM-dd HH:mm", { timeZone: "America/New_York" }); // "2025-
|
|
|
314
314
|
format(instant, "yyyy-MM-dd HH:mm", { timeZone: "Asia/Tokyo" }); // "2025-01-21 05:30"
|
|
315
315
|
```
|
|
316
316
|
|
|
317
|
+
#### `formatPlainDate(date, formatStr, options?)`
|
|
318
|
+
|
|
319
|
+
Format a Temporal.PlainDate using date-fns-like format tokens. Only supports date-related tokens (no time or timezone tokens).
|
|
320
|
+
|
|
321
|
+
**Parameters:**
|
|
322
|
+
- `date` (Temporal.PlainDate): A Temporal.PlainDate to format
|
|
323
|
+
- `formatStr` (string): Format string using date-fns tokens (e.g., "yyyy-MM-dd")
|
|
324
|
+
- `options` (FormatPlainDateOptions, optional): Configuration for locale
|
|
325
|
+
- `locale` (string): BCP 47 language tag (default: "en-US")
|
|
326
|
+
|
|
327
|
+
**Returns:** `string` - Formatted date string
|
|
328
|
+
|
|
329
|
+
**Supported tokens:**
|
|
330
|
+
- **Year**: `yyyy` (2025), `yy` (25), `y` (2025)
|
|
331
|
+
- **Month**: `MMMM` (January), `MMM` (Jan), `MM` (01), `M` (1), `Mo` (1st)
|
|
332
|
+
- **Day**: `dd` (20), `d` (20), `do` (20th)
|
|
333
|
+
- **Weekday**: `EEEE` (Monday), `EEE` (Mon), `EEEEE` (M)
|
|
334
|
+
- **Quarter**: `Q` (1), `QQQ` (Q1), `QQQQ` (1st quarter)
|
|
335
|
+
- **Era**: `G` (AD), `GGGG` (Anno Domini)
|
|
336
|
+
- **Escape text**: Use single quotes `'...'`, double single quotes `''` for literal quote
|
|
337
|
+
|
|
338
|
+
**Example:**
|
|
339
|
+
```typescript
|
|
340
|
+
import { formatPlainDate, today } from '@gobrand/tiempo';
|
|
341
|
+
|
|
342
|
+
const date = Temporal.PlainDate.from("2025-01-20");
|
|
343
|
+
|
|
344
|
+
formatPlainDate(date, "yyyy-MM-dd"); // "2025-01-20"
|
|
345
|
+
formatPlainDate(date, "MMMM d, yyyy"); // "January 20, 2025"
|
|
346
|
+
formatPlainDate(date, "EEEE, MMMM do, yyyy"); // "Monday, January 20th, 2025"
|
|
347
|
+
formatPlainDate(date, "MM/dd/yyyy"); // "01/20/2025"
|
|
348
|
+
|
|
349
|
+
// With locale
|
|
350
|
+
formatPlainDate(date, "MMMM d, yyyy", { locale: "es-ES" }); // "enero 20, 2025"
|
|
351
|
+
formatPlainDate(date, "EEEE", { locale: "de-DE" }); // "Montag"
|
|
352
|
+
|
|
353
|
+
// Use with today()
|
|
354
|
+
const todayFormatted = formatPlainDate(today(), "EEEE, MMMM do");
|
|
355
|
+
// "Thursday, January 23rd"
|
|
356
|
+
```
|
|
357
|
+
|
|
317
358
|
### Start/End Utilities
|
|
318
359
|
|
|
319
360
|
#### `today(timezone?)`
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// src/formatPlainDate.ts
|
|
2
|
+
import "@js-temporal/polyfill";
|
|
3
|
+
function formatPlainDate(date, formatStr, options = {}) {
|
|
4
|
+
const { locale = "en-US" } = options;
|
|
5
|
+
let result = "";
|
|
6
|
+
let i = 0;
|
|
7
|
+
const len = formatStr.length;
|
|
8
|
+
while (i < len) {
|
|
9
|
+
const char = formatStr[i];
|
|
10
|
+
if (!char) break;
|
|
11
|
+
if (char === "'") {
|
|
12
|
+
if (i + 1 < len && formatStr[i + 1] === "'") {
|
|
13
|
+
result += "'";
|
|
14
|
+
i += 2;
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
i++;
|
|
18
|
+
while (i < len) {
|
|
19
|
+
if (formatStr[i] === "'") {
|
|
20
|
+
if (i + 1 < len && formatStr[i + 1] === "'") {
|
|
21
|
+
result += "'";
|
|
22
|
+
i += 2;
|
|
23
|
+
} else {
|
|
24
|
+
i++;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
result += formatStr[i];
|
|
29
|
+
i++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const token = consumeToken(formatStr, i, char);
|
|
35
|
+
if (token !== null) {
|
|
36
|
+
result += formatToken(token, date, locale);
|
|
37
|
+
i += token.length;
|
|
38
|
+
} else {
|
|
39
|
+
result += char;
|
|
40
|
+
i++;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
function consumeToken(formatStr, start, char) {
|
|
46
|
+
if (char === "M" && start + 1 < formatStr.length && formatStr[start + 1] === "o") {
|
|
47
|
+
return "Mo";
|
|
48
|
+
}
|
|
49
|
+
if (char === "d" && start + 1 < formatStr.length && formatStr[start + 1] === "o") {
|
|
50
|
+
return "do";
|
|
51
|
+
}
|
|
52
|
+
let end = start;
|
|
53
|
+
while (end < formatStr.length && formatStr[end] === char) {
|
|
54
|
+
end++;
|
|
55
|
+
}
|
|
56
|
+
const count = end - start;
|
|
57
|
+
const validTokens = [
|
|
58
|
+
// Era
|
|
59
|
+
"GGGGG",
|
|
60
|
+
"GGGG",
|
|
61
|
+
"GGG",
|
|
62
|
+
"GG",
|
|
63
|
+
"G",
|
|
64
|
+
// Year
|
|
65
|
+
"yyyy",
|
|
66
|
+
"yyy",
|
|
67
|
+
"yy",
|
|
68
|
+
"y",
|
|
69
|
+
// Quarter
|
|
70
|
+
"QQQQQ",
|
|
71
|
+
"QQQQ",
|
|
72
|
+
"QQQ",
|
|
73
|
+
"QQ",
|
|
74
|
+
"Q",
|
|
75
|
+
// Month
|
|
76
|
+
"MMMMM",
|
|
77
|
+
"MMMM",
|
|
78
|
+
"MMM",
|
|
79
|
+
"MM",
|
|
80
|
+
"M",
|
|
81
|
+
// Day
|
|
82
|
+
"dd",
|
|
83
|
+
"d",
|
|
84
|
+
// Weekday
|
|
85
|
+
"EEEEEE",
|
|
86
|
+
"EEEEE",
|
|
87
|
+
"EEEE",
|
|
88
|
+
"EEE",
|
|
89
|
+
"EE",
|
|
90
|
+
"E"
|
|
91
|
+
];
|
|
92
|
+
for (let len = Math.min(count, 6); len > 0; len--) {
|
|
93
|
+
const candidate = char.repeat(len);
|
|
94
|
+
if (validTokens.includes(candidate)) {
|
|
95
|
+
return candidate;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
function formatToken(token, date, locale) {
|
|
101
|
+
switch (token) {
|
|
102
|
+
// Era
|
|
103
|
+
case "GGGGG":
|
|
104
|
+
return formatPart(date, "era", "narrow", locale);
|
|
105
|
+
case "GGGG":
|
|
106
|
+
return formatPart(date, "era", "long", locale);
|
|
107
|
+
case "GGG":
|
|
108
|
+
case "GG":
|
|
109
|
+
case "G":
|
|
110
|
+
return formatPart(date, "era", "short", locale);
|
|
111
|
+
// Year
|
|
112
|
+
case "yyyy":
|
|
113
|
+
return date.year.toString().padStart(4, "0");
|
|
114
|
+
case "yyy":
|
|
115
|
+
return date.year.toString().padStart(3, "0");
|
|
116
|
+
case "yy":
|
|
117
|
+
return (date.year % 100).toString().padStart(2, "0");
|
|
118
|
+
case "y":
|
|
119
|
+
return date.year.toString();
|
|
120
|
+
// Quarter
|
|
121
|
+
case "QQQQQ":
|
|
122
|
+
return Math.ceil(date.month / 3).toString();
|
|
123
|
+
case "QQQQ": {
|
|
124
|
+
const quarter = Math.ceil(date.month / 3);
|
|
125
|
+
return `${quarter}${getOrdinalSuffix(quarter)} quarter`;
|
|
126
|
+
}
|
|
127
|
+
case "QQQ":
|
|
128
|
+
return `Q${Math.ceil(date.month / 3)}`;
|
|
129
|
+
case "QQ":
|
|
130
|
+
return Math.ceil(date.month / 3).toString().padStart(2, "0");
|
|
131
|
+
case "Q":
|
|
132
|
+
return Math.ceil(date.month / 3).toString();
|
|
133
|
+
// Month
|
|
134
|
+
case "MMMMM":
|
|
135
|
+
return formatPart(date, "month", "narrow", locale);
|
|
136
|
+
case "MMMM":
|
|
137
|
+
return formatPart(date, "month", "long", locale);
|
|
138
|
+
case "MMM":
|
|
139
|
+
return formatPart(date, "month", "short", locale);
|
|
140
|
+
case "MM":
|
|
141
|
+
return date.month.toString().padStart(2, "0");
|
|
142
|
+
case "Mo":
|
|
143
|
+
return `${date.month}${getOrdinalSuffix(date.month)}`;
|
|
144
|
+
case "M":
|
|
145
|
+
return date.month.toString();
|
|
146
|
+
// Day of month
|
|
147
|
+
case "do":
|
|
148
|
+
return `${date.day}${getOrdinalSuffix(date.day)}`;
|
|
149
|
+
case "dd":
|
|
150
|
+
return date.day.toString().padStart(2, "0");
|
|
151
|
+
case "d":
|
|
152
|
+
return date.day.toString();
|
|
153
|
+
// Day of week
|
|
154
|
+
case "EEEEEE":
|
|
155
|
+
return formatPart(date, "weekday", "short", locale).slice(0, 2);
|
|
156
|
+
case "EEEEE":
|
|
157
|
+
return formatPart(date, "weekday", "narrow", locale);
|
|
158
|
+
case "EEEE":
|
|
159
|
+
return formatPart(date, "weekday", "long", locale);
|
|
160
|
+
case "EEE":
|
|
161
|
+
case "EE":
|
|
162
|
+
case "E":
|
|
163
|
+
return formatPart(date, "weekday", "short", locale);
|
|
164
|
+
default:
|
|
165
|
+
return token;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function formatPart(date, part, style, locale) {
|
|
169
|
+
const options = {
|
|
170
|
+
[part]: style
|
|
171
|
+
};
|
|
172
|
+
return date.toLocaleString(locale, options);
|
|
173
|
+
}
|
|
174
|
+
function getOrdinalSuffix(num) {
|
|
175
|
+
const j = num % 10;
|
|
176
|
+
const k = num % 100;
|
|
177
|
+
if (j === 1 && k !== 11) return "st";
|
|
178
|
+
if (j === 2 && k !== 12) return "nd";
|
|
179
|
+
if (j === 3 && k !== 13) return "rd";
|
|
180
|
+
return "th";
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export {
|
|
184
|
+
formatPlainDate
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=chunk-3A6X6WV5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/formatPlainDate.ts"],"sourcesContent":["import { Temporal } from '@js-temporal/polyfill';\n\nexport interface FormatPlainDateOptions {\n locale?: string;\n}\n\n/**\n * Format a Temporal.PlainDate using date-fns-like format tokens.\n * Uses Intl.DateTimeFormat under the hood for locale support.\n *\n * Only supports date-related tokens (no time or timezone tokens).\n *\n * @param date - A Temporal.PlainDate to format\n * @param formatStr - Format string using date-fns tokens (e.g., \"yyyy-MM-dd\")\n * @param options - Optional configuration for locale\n * @returns Formatted date string\n *\n * @example\n * ```typescript\n * const date = Temporal.PlainDate.from(\"2025-01-20\");\n *\n * formatPlainDate(date, \"yyyy-MM-dd\"); // \"2025-01-20\"\n * formatPlainDate(date, \"MMMM d, yyyy\"); // \"January 20, 2025\"\n * formatPlainDate(date, \"EEEE, MMMM do, yyyy\"); // \"Monday, January 20th, 2025\"\n *\n * // With locale\n * formatPlainDate(date, \"MMMM d, yyyy\", { locale: \"es-ES\" }); // \"enero 20, 2025\"\n * ```\n */\nexport function formatPlainDate(\n date: Temporal.PlainDate,\n formatStr: string,\n options: FormatPlainDateOptions = {}\n): string {\n const { locale = 'en-US' } = options;\n\n let result = '';\n let i = 0;\n const len = formatStr.length;\n\n while (i < len) {\n const char = formatStr[i];\n if (!char) break;\n\n // Handle escaped text\n if (char === \"'\") {\n // Check for double single quote (not inside a string, just '')\n if (i + 1 < len && formatStr[i + 1] === \"'\") {\n result += \"'\";\n i += 2;\n continue;\n }\n // Find closing quote, handling '' inside the string\n i++;\n while (i < len) {\n if (formatStr[i] === \"'\") {\n // Check if it's a doubled quote ''\n if (i + 1 < len && formatStr[i + 1] === \"'\") {\n result += \"'\";\n i += 2;\n } else {\n // End of quoted string\n i++;\n break;\n }\n } else {\n result += formatStr[i];\n i++;\n }\n }\n continue;\n }\n\n // Check for tokens by looking ahead\n const token = consumeToken(formatStr, i, char);\n if (token !== null) {\n result += formatToken(token, date, locale);\n i += token.length;\n } else {\n result += char;\n i++;\n }\n }\n\n return result;\n}\n\nfunction consumeToken(formatStr: string, start: number, char: string): string | null {\n // Special case for 'Mo' and 'do' - these end with 'o'\n if (char === 'M' && start + 1 < formatStr.length && formatStr[start + 1] === 'o') {\n return 'Mo';\n }\n if (char === 'd' && start + 1 < formatStr.length && formatStr[start + 1] === 'o') {\n return 'do';\n }\n\n // Count how many consecutive identical characters\n let end = start;\n while (end < formatStr.length && formatStr[end] === char) {\n end++;\n }\n const count = end - start;\n\n // Valid tokens for PlainDate (date-only, no time/timezone)\n const validTokens = [\n // Era\n 'GGGGG',\n 'GGGG',\n 'GGG',\n 'GG',\n 'G',\n // Year\n 'yyyy',\n 'yyy',\n 'yy',\n 'y',\n // Quarter\n 'QQQQQ',\n 'QQQQ',\n 'QQQ',\n 'QQ',\n 'Q',\n // Month\n 'MMMMM',\n 'MMMM',\n 'MMM',\n 'MM',\n 'M',\n // Day\n 'dd',\n 'd',\n // Weekday\n 'EEEEEE',\n 'EEEEE',\n 'EEEE',\n 'EEE',\n 'EE',\n 'E',\n ];\n\n // Try to match from longest to shortest\n for (let len = Math.min(count, 6); len > 0; len--) {\n const candidate = char.repeat(len);\n if (validTokens.includes(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nfunction formatToken(token: string, date: Temporal.PlainDate, locale: string): string {\n switch (token) {\n // Era\n case 'GGGGG':\n return formatPart(date, 'era', 'narrow', locale);\n case 'GGGG':\n return formatPart(date, 'era', 'long', locale);\n case 'GGG':\n case 'GG':\n case 'G':\n return formatPart(date, 'era', 'short', locale);\n\n // Year\n case 'yyyy':\n return date.year.toString().padStart(4, '0');\n case 'yyy':\n return date.year.toString().padStart(3, '0');\n case 'yy':\n return (date.year % 100).toString().padStart(2, '0');\n case 'y':\n return date.year.toString();\n\n // Quarter\n case 'QQQQQ':\n return Math.ceil(date.month / 3).toString();\n case 'QQQQ': {\n const quarter = Math.ceil(date.month / 3);\n return `${quarter}${getOrdinalSuffix(quarter)} quarter`;\n }\n case 'QQQ':\n return `Q${Math.ceil(date.month / 3)}`;\n case 'QQ':\n return Math.ceil(date.month / 3)\n .toString()\n .padStart(2, '0');\n case 'Q':\n return Math.ceil(date.month / 3).toString();\n\n // Month\n case 'MMMMM':\n return formatPart(date, 'month', 'narrow', locale);\n case 'MMMM':\n return formatPart(date, 'month', 'long', locale);\n case 'MMM':\n return formatPart(date, 'month', 'short', locale);\n case 'MM':\n return date.month.toString().padStart(2, '0');\n case 'Mo':\n return `${date.month}${getOrdinalSuffix(date.month)}`;\n case 'M':\n return date.month.toString();\n\n // Day of month\n case 'do':\n return `${date.day}${getOrdinalSuffix(date.day)}`;\n case 'dd':\n return date.day.toString().padStart(2, '0');\n case 'd':\n return date.day.toString();\n\n // Day of week\n case 'EEEEEE':\n return formatPart(date, 'weekday', 'short', locale).slice(0, 2);\n case 'EEEEE':\n return formatPart(date, 'weekday', 'narrow', locale);\n case 'EEEE':\n return formatPart(date, 'weekday', 'long', locale);\n case 'EEE':\n case 'EE':\n case 'E':\n return formatPart(date, 'weekday', 'short', locale);\n\n default:\n return token;\n }\n}\n\nfunction formatPart(\n date: Temporal.PlainDate,\n part: 'era' | 'year' | 'month' | 'weekday' | 'day',\n style: 'narrow' | 'short' | 'long' | 'numeric' | '2-digit',\n locale: string\n): string {\n const options: Intl.DateTimeFormatOptions = {\n [part]: style,\n };\n\n return date.toLocaleString(locale, options);\n}\n\nfunction getOrdinalSuffix(num: number): string {\n const j = num % 10;\n const k = num % 100;\n if (j === 1 && k !== 11) return 'st';\n if (j === 2 && k !== 12) return 'nd';\n if (j === 3 && k !== 13) return 'rd';\n return 'th';\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Temporal } from '@js-temporal/polyfill';
|
|
2
|
+
export interface FormatPlainDateOptions {
|
|
3
|
+
locale?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Format a Temporal.PlainDate using date-fns-like format tokens.
|
|
7
|
+
* Uses Intl.DateTimeFormat under the hood for locale support.
|
|
8
|
+
*
|
|
9
|
+
* Only supports date-related tokens (no time or timezone tokens).
|
|
10
|
+
*
|
|
11
|
+
* @param date - A Temporal.PlainDate to format
|
|
12
|
+
* @param formatStr - Format string using date-fns tokens (e.g., "yyyy-MM-dd")
|
|
13
|
+
* @param options - Optional configuration for locale
|
|
14
|
+
* @returns Formatted date string
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const date = Temporal.PlainDate.from("2025-01-20");
|
|
19
|
+
*
|
|
20
|
+
* formatPlainDate(date, "yyyy-MM-dd"); // "2025-01-20"
|
|
21
|
+
* formatPlainDate(date, "MMMM d, yyyy"); // "January 20, 2025"
|
|
22
|
+
* formatPlainDate(date, "EEEE, MMMM do, yyyy"); // "Monday, January 20th, 2025"
|
|
23
|
+
*
|
|
24
|
+
* // With locale
|
|
25
|
+
* formatPlainDate(date, "MMMM d, yyyy", { locale: "es-ES" }); // "enero 20, 2025"
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatPlainDate(date: Temporal.PlainDate, formatStr: string, options?: FormatPlainDateOptions): string;
|
|
29
|
+
//# sourceMappingURL=formatPlainDate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatPlainDate.d.ts","sourceRoot":"","sources":["../src/formatPlainDate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,SAAS,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAoDR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatPlainDate.test.d.ts","sourceRoot":"","sources":["../src/formatPlainDate.test.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { toUtc } from './toUtc';
|
|
|
3
3
|
export { toUtcString } from './toUtcString';
|
|
4
4
|
export { toDate } from './toDate';
|
|
5
5
|
export { format, type FormatOptions } from './format';
|
|
6
|
+
export { formatPlainDate, type FormatPlainDateOptions } from './formatPlainDate';
|
|
6
7
|
export { today } from './today';
|
|
7
8
|
export { now } from './now';
|
|
8
9
|
export { startOfDay } from './startOfDay';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toZonedTime
|
|
3
|
+
} from "./chunk-2MP3ESL7.js";
|
|
1
4
|
import {
|
|
2
5
|
today
|
|
3
6
|
} from "./chunk-67QHALIG.js";
|
|
7
|
+
import {
|
|
8
|
+
subNanoseconds
|
|
9
|
+
} from "./chunk-WVHAYLBW.js";
|
|
4
10
|
import {
|
|
5
11
|
subSeconds
|
|
6
12
|
} from "./chunk-BH2YB4MV.js";
|
|
@@ -20,8 +26,8 @@ import {
|
|
|
20
26
|
toUtcString
|
|
21
27
|
} from "./chunk-DMKGJY4N.js";
|
|
22
28
|
import {
|
|
23
|
-
|
|
24
|
-
} from "./chunk-
|
|
29
|
+
startOfWeek
|
|
30
|
+
} from "./chunk-2WMXB7QL.js";
|
|
25
31
|
import {
|
|
26
32
|
startOfYear
|
|
27
33
|
} from "./chunk-YR2UCUIT.js";
|
|
@@ -44,8 +50,8 @@ import {
|
|
|
44
50
|
subMonths
|
|
45
51
|
} from "./chunk-52NEOY34.js";
|
|
46
52
|
import {
|
|
47
|
-
|
|
48
|
-
} from "./chunk-
|
|
53
|
+
isSameMonth
|
|
54
|
+
} from "./chunk-ADQTZVMH.js";
|
|
49
55
|
import {
|
|
50
56
|
isSameNanosecond
|
|
51
57
|
} from "./chunk-S63QUP4W.js";
|
|
@@ -68,8 +74,8 @@ import {
|
|
|
68
74
|
startOfMonth
|
|
69
75
|
} from "./chunk-TU2UNOOW.js";
|
|
70
76
|
import {
|
|
71
|
-
|
|
72
|
-
} from "./chunk-
|
|
77
|
+
isPlainDateAfter
|
|
78
|
+
} from "./chunk-BPZ7BRJW.js";
|
|
73
79
|
import {
|
|
74
80
|
isPlainDateBefore
|
|
75
81
|
} from "./chunk-4E7OGJ3F.js";
|
|
@@ -91,12 +97,12 @@ import {
|
|
|
91
97
|
import {
|
|
92
98
|
isSameMinute
|
|
93
99
|
} from "./chunk-LDO6PRNJ.js";
|
|
94
|
-
import {
|
|
95
|
-
isSameMonth
|
|
96
|
-
} from "./chunk-ADQTZVMH.js";
|
|
97
100
|
import {
|
|
98
101
|
format
|
|
99
102
|
} from "./chunk-2G5RJGPR.js";
|
|
103
|
+
import {
|
|
104
|
+
formatPlainDate
|
|
105
|
+
} from "./chunk-3A6X6WV5.js";
|
|
100
106
|
import {
|
|
101
107
|
intlFormatDistance
|
|
102
108
|
} from "./chunk-XEDXPI5G.js";
|
|
@@ -112,9 +118,6 @@ import {
|
|
|
112
118
|
import {
|
|
113
119
|
isPast
|
|
114
120
|
} from "./chunk-2H4KLXGL.js";
|
|
115
|
-
import {
|
|
116
|
-
isPlainDateAfter
|
|
117
|
-
} from "./chunk-BPZ7BRJW.js";
|
|
118
121
|
import {
|
|
119
122
|
differenceInNanoseconds
|
|
120
123
|
} from "./chunk-OABS374T.js";
|
|
@@ -215,6 +218,7 @@ export {
|
|
|
215
218
|
endOfWeek,
|
|
216
219
|
endOfYear,
|
|
217
220
|
format,
|
|
221
|
+
formatPlainDate,
|
|
218
222
|
intlFormatDistance,
|
|
219
223
|
isAfter,
|
|
220
224
|
isBefore,
|
package/package.json
CHANGED