Skip to content

Commit ddc28d8

Browse files
committed
Add typings for JSDate
1 parent 7b94cf8 commit ddc28d8

File tree

2 files changed

+319
-0
lines changed

2 files changed

+319
-0
lines changed

js_interop/lib/js_interop.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
export 'src/date.dart';

js_interop/lib/src/date.dart

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'dart:js_interop';
6+
7+
/// The JS [`Date`] type.
8+
///
9+
/// [`Date`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
10+
@JS('Date')
11+
extension type JSDate._(JSObject _) implements JSObject {
12+
/// The [Date constructor] that returns the current date and time.
13+
///
14+
/// [Date constructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
15+
external JSDate.now();
16+
17+
/// The [Date constructor] with the number of milliseconds since the epoch of
18+
/// January 1, 1970, UTC.
19+
///
20+
/// [Date constructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#time_value_or_timestamp_number
21+
external JSDate.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch);
22+
23+
/// The [Date constructor] that parses its value [from a string].
24+
///
25+
/// [Date constructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
26+
/// [from a string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#date_string
27+
external JSDate.parse(String dateString);
28+
29+
/// The [Date constructor] that copies its value [from an existing Date].
30+
///
31+
/// [Date constructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
32+
/// [from an existing Date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#date_object
33+
external JSDate.from(JSDate other);
34+
35+
/// The [Date constructor] that uses [individual component integers].
36+
///
37+
/// [Date constructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
38+
/// [individual component integers]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#individual_date_and_time_component_values
39+
external JSDate(int year, int month,
40+
[int? day, int? hours, int? minutes, int? seconds, int? milliseconds]);
41+
42+
/// Dee [`Date.now()`].
43+
///
44+
/// [`Date.now()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now
45+
@JS('now')
46+
external static int nowAsMillisecondsSinceEpoch();
47+
48+
/// See [`Date.parse()`].
49+
///
50+
/// [`Date.parse()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
51+
@JS('parse')
52+
external static int parseAsMillisecondsSinceEpoch(String dateString);
53+
54+
/// The [`Date.utc()`] function.
55+
///
56+
/// [`Date.utc()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC
57+
@JS('UTC')
58+
external static int utc(int year,
59+
[int? month,
60+
int? day,
61+
int? hours,
62+
int? minutes,
63+
int? seconds,
64+
int? milliseconds]);
65+
66+
/// See [`Date.getDate()`] and [`Date.setDate()`].
67+
///
68+
/// [`Date.getDate()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate
69+
/// [`Date.setDate()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate
70+
int get date => _getDate();
71+
set date(int value) => _setDate(value);
72+
73+
@JS('getDate')
74+
external int _getDate();
75+
76+
@JS('setDate')
77+
external void _setDate(int value);
78+
79+
/// See [`Date.getDay()`] and [`Date.setDay()`].
80+
///
81+
/// [`Date.getDay()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay
82+
/// [`Date.setDay()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDay
83+
int get day => _getDay();
84+
set day(int value) => _setDay(value);
85+
86+
@JS('getDay')
87+
external int _getDay();
88+
89+
@JS('setDay')
90+
external void _setDay(int value);
91+
92+
/// See [`Date.getFullYear()`] and [`Date.setFullYear()`].
93+
///
94+
/// [`Date.getFullYear()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear
95+
/// [`Date.setFullYear()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear
96+
int get fullYear => _getFullYear();
97+
set fullYear(int value) => _setFullYear(value);
98+
99+
@JS('getFullYear')
100+
external int _getFullYear();
101+
102+
@JS('setFullYear')
103+
external void _setFullYear(int value);
104+
105+
/// See [`Date.getHours()`] and [`Date.setHours()`].
106+
///
107+
/// [`Date.getHours()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours
108+
/// [`Date.setHours()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours
109+
int get hours => _getHours();
110+
set hours(int value) => _setHours(value);
111+
112+
@JS('getHours')
113+
external int _getHours();
114+
115+
@JS('setHours')
116+
external void _setHours(int value);
117+
118+
/// See [`Date.getMilliseconds()`] and [`Date.setMilliseconds()`].
119+
///
120+
/// [`Date.getMilliseconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds
121+
/// [`Date.setMilliseconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds
122+
int get milliseconds => _getMilliseconds();
123+
set milliseconds(int value) => _setMilliseconds(value);
124+
125+
@JS('getMilliseconds')
126+
external int _getMilliseconds();
127+
128+
@JS('setMilliseconds')
129+
external void _setMilliseconds(int value);
130+
131+
/// See [`Date.getMinutes()`] and [`Date.setMinutes()`].
132+
///
133+
/// [`Date.getMinutes()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes
134+
/// [`Date.setMinutes()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes
135+
int get minutes => _getMinutes();
136+
set minutes(int value) => _setMinutes(value);
137+
138+
@JS('getMinutes')
139+
external int _getMinutes();
140+
141+
@JS('setMinutes')
142+
external void _setMinutes(int value);
143+
144+
/// See [`Date.getMonth()`] and [`Date.setMonth()`].
145+
///
146+
/// [`Date.getMonth()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth
147+
/// [`Date.setMonth()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth
148+
int get month => _getMonth();
149+
set month(int value) => _setMonth(value);
150+
151+
@JS('getMonth')
152+
external int _getMonth();
153+
154+
@JS('setMonth')
155+
external void _setMonth(int value);
156+
157+
/// See [`Date.getSeconds()`] and [`Date.setSeconds()`].
158+
///
159+
/// [`Date.getSeconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds
160+
/// [`Date.setSeconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds
161+
int get seconds => _getSeconds();
162+
set seconds(int value) => _setSeconds(value);
163+
164+
@JS('getSeconds')
165+
external int _getSeconds();
166+
167+
@JS('setSeconds')
168+
external void _setSeconds(int value);
169+
170+
/// See [`Date.getTime()`] and [`Date.setTime()`].
171+
///
172+
/// [`Date.getTime()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime
173+
/// [`Date.setTime()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime
174+
int get time => _getTime();
175+
set time(int value) => _setTime(value);
176+
177+
@JS('getTime')
178+
external int _getTime();
179+
180+
@JS('setTime')
181+
external void _setTime(int value);
182+
183+
/// See [`Date.getTimezoneOffset()`].
184+
///
185+
/// [`Date.getTimezoneOffset()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
186+
int get timezoneOffset => _getTimezoneOffset();
187+
188+
@JS('getTimezoneOffset')
189+
external int _getTimezoneOffset();
190+
191+
/// See [`Date.getUTCDate()`] and [`Date.setUTCDate()`].
192+
///
193+
/// [`Date.getUTCDate()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate
194+
/// [`Date.setUTCDate()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate
195+
int get utcDate => _getUtcDate();
196+
set utcDate(int value) => _setUtcDate(value);
197+
198+
@JS('getUTCDate')
199+
external int _getUtcDate();
200+
201+
@JS('setUTCDate')
202+
external void _setUtcDate(int value);
203+
204+
/// See [`Date.getUTCFullYear()`] and [`Date.setUTCFullYear()`].
205+
///
206+
/// [`Date.getUTCFullYear()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear
207+
/// [`Date.setUTCFullYear()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear
208+
int get utcFullYear => _getUtcFullYear();
209+
set utcFullYear(int value) => _setUtcFullYear(value);
210+
211+
@JS('getUTCFullYear')
212+
external int _getUtcFullYear();
213+
214+
@JS('setUTCFullYear')
215+
external void _setUtcFullYear(int value);
216+
217+
/// See [`Date.getUTCHours()`] and [`Date.setUTCHours()`].
218+
///
219+
/// [`Date.getUTCHours()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours
220+
/// [`Date.setUTCHours()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours
221+
int get utcHours => _getUtcHours();
222+
set utcHours(int value) => _setUtcHours(value);
223+
224+
@JS('getUTCHours')
225+
external int _getUtcHours();
226+
227+
@JS('setUTCHours')
228+
external void _setUtcHours(int value);
229+
230+
/// See [`Date.getUTCMilliseconds()`] and [`Date.setUTCMilliseconds()`].
231+
///
232+
/// [`Date.getUTCMilliseconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds
233+
/// [`Date.setUTCMilliseconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds
234+
int get utcMilliseconds => _getUtcMilliseconds();
235+
set utcMilliseconds(int value) => _setUtcMilliseconds(value);
236+
237+
@JS('getUTCMilliseconds')
238+
external int _getUtcMilliseconds();
239+
240+
@JS('setUTCMilliseconds')
241+
external void _setUtcMilliseconds(int value);
242+
243+
/// See [`Date.getUTCMinutes()`] and [`Date.setUTCMinutes()`].
244+
///
245+
/// [`Date.getUTCMinutes()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes
246+
/// [`Date.setUTCMinutes()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes
247+
int get utcMinutes => _getUtcMinutes();
248+
set utcMinutes(int value) => _setUtcMinutes(value);
249+
250+
@JS('getUTCMinutes')
251+
external int _getUtcMinutes();
252+
253+
@JS('setUTCMinutes')
254+
external void _setUtcMinutes(int value);
255+
256+
/// See [`Date.getUTCMonth()`] and [`Date.setUTCMonth()`].
257+
///
258+
/// [`Date.getUTCMonth()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth
259+
/// [`Date.setUTCMonth()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth
260+
int get utcMonth => _getUtcMonth();
261+
set utcMonth(int value) => _setUtcMonth(value);
262+
263+
@JS('getUTCMonth')
264+
external int _getUtcMonth();
265+
266+
@JS('setUTCMonth')
267+
external void _setUtcMonth(int value);
268+
269+
/// See [`Date.getUTCSeconds()`] and [`Date.setUTCSeconds()`].
270+
///
271+
/// [`Date.getUTCSeconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds
272+
/// [`Date.setUTCSeconds()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds
273+
int get utcSeconds => _getUtcSeconds();
274+
set utcSeconds(int value) => _setUtcSeconds(value);
275+
276+
@JS('getUTCSeconds')
277+
external int _getUtcSeconds();
278+
279+
@JS('setUTCSeconds')
280+
external void _setUtcSeconds(int value);
281+
282+
/// See [`Date.toDateString()`].
283+
///
284+
/// [`Date.toDateString()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString
285+
external String toDateString();
286+
287+
/// See [`Date.toDateString()`].
288+
///
289+
/// [`Date.toDateString()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString
290+
@JS('toISOString')
291+
external String toIsoString();
292+
293+
// TODO - Add `toLocale*String` when Intl.DateTimeFormat is fully typed.
294+
295+
/// See [`Date.toTimeString()`].
296+
///
297+
/// [`Date.toTimeString()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString
298+
external String toTimeString();
299+
300+
/// See [`Date.toUTCString()`].
301+
///
302+
/// [`Date.toUTCString()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString
303+
@JS('toUTCString')
304+
external String toUtcString();
305+
306+
/// Converts this to a Dart [DateTime] that represents the same point in time
307+
/// in the local time zone.
308+
DateTime get toDart => DateTime.fromMillisecondsSinceEpoch(time);
309+
310+
/// Converts this to a Dart [DateTime] that represents the same point in time
311+
/// in the UTC time zone.
312+
DateTime get toDartUtc =>
313+
DateTime.fromMillisecondsSinceEpoch(time, isUtc: true);
314+
}

0 commit comments

Comments
 (0)