stdweb/webapi/date.rs
1use webcore::value::Reference;
2use webcore::try_from::TryInto;
3
4/// [(JavaScript docs)](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date)
5/// https://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor
6#[derive(Clone, Debug, PartialEq, Eq, ReferenceType)]
7#[reference(instance_of = "Date")]
8pub struct Date( Reference );
9
10impl Date {
11 /// Creates a JavaScript Date instance that represents a single moment in time.
12 /// Date objects are based on a time value that is the number of milliseconds since 1 January 1970 UTC.
13 ///
14 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
15 // https://www.ecma-international.org/ecma-262/6.0/#sec-date-constructor-date
16 pub fn new() -> Self {
17 js!(
18 return new Date();
19 ).try_into().unwrap()
20 }
21
22
23 /// Creates a JavaScript Date instance that represents a single moment in time.
24 /// Date objects are based on a time value that is the number of milliseconds since 1 January 1970 UTC.
25 ///
26 /// year is an integer value representing the year. Values from 0 to 99 map to the years 1900 to 1999.
27 /// month is an integer value representing the month, beginning with 0 for January to 11 for December
28 /// day is an integer value representing the day of the month (normally from 1 to 31)
29 /// hours an integer value representing the minute segment of a time
30 /// seconds an integer value representing the second segment of a time
31 /// milliseconds an integer value representing the millisecond segment of a time
32 ///
33 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
34 // https://www.ecma-international.org/ecma-262/6.0/#sec-date-year-month-date-hours-minutes-seconds-ms
35 pub fn from_datetime(year: i32, month: i32, day: i32, hours: i32, minutes: i32, seconds: i32, milliseconds: i32) -> Self {
36 js!(
37 return new Date(@{year}, @{month}, @{day}, @{hours}, @{minutes}, @{seconds}, @{milliseconds});
38 ).try_into().unwrap()
39 }
40
41 /// Creates a JavaScript Date instance that represents a single moment in time.
42 /// Date objects are based on a time value that is the number of milliseconds since 1 January 1970 UTC.
43 ///
44 /// String value representing a date. The string should be in a format recognized by
45 /// the Date.parse() method (IETF-compliant RFC 2822 timestamps and also a version of ISO8601).
46 ///
47 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
48 // https://www.ecma-international.org/ecma-262/6.0/#sec-date-value
49 pub fn from_iso8601(date_string: &str) -> Self {
50 js!(
51 return new Date(@{date_string});
52 ).try_into().unwrap()
53 }
54
55 /// Creates a JavaScript Date instance that represents a single moment in time.
56 /// Date objects are based on a time value that is the number of milliseconds since 1 January 1970 UTC.
57 ///
58 /// Integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC,
59 /// with leap seconds ignored (Unix Epoch; but consider that most Unix timestamp functions count in seconds).
60 ///
61 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
62 // https://www.ecma-international.org/ecma-262/6.0/#sec-date-value
63 pub fn from_time(now: f64) -> Self {
64 js!(
65 return new Date(@{now});
66 ).try_into().unwrap()
67 }
68
69 /// The Date.UTC() method accepts the same parameters as the longest form of the constructor, and
70 /// returns the number of milliseconds in a Date object since January 1, 1970, 00:00:00, universal time.
71 ///
72 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC)
73 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.utc
74 pub fn utc(year: i32, month: i32, day: i32, hours: i32, minutes: i32, seconds: i32, milliseconds: i32) -> f64 {
75 js!(
76 return Date.UTC(@{year}, @{month}, @{day}, @{hours}, @{minutes}, @{seconds}, @{milliseconds});
77 ).try_into().unwrap()
78 }
79
80 /// The Date.parse() method parses a string representation of a date, and returns the number of
81 /// milliseconds since January 1, 1970, 00:00:00 UTC or NaN if the string is unrecognized or, in
82 /// some cases, contains illegal date values (e.g. 2015-02-31).
83 ///
84 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
85 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.parse
86 pub fn parse(date_string: &str) -> f64 {
87 js!(
88 return Date.parse(@{date_string});
89 ).try_into().unwrap()
90 }
91
92 /// The Date.now() method returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
93 ///
94 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now)
95 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.now
96 pub fn now() -> f64 {
97 js!(
98 return Date.now();
99 ).try_into().unwrap()
100 }
101
102 /// The getDate() method returns the day of the month for the specified date according to local time.
103 ///
104 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate)
105 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getdate
106 pub fn get_date(&self) -> i32 {
107 js!(
108 return @{self}.getDate();
109 ).try_into().unwrap()
110 }
111
112 /// The getDay() method returns the day of the week for the specified date according to local time,
113 /// where 0 represents Sunday. For the day of the month see getDate().
114 ///
115 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay)
116 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getday
117 pub fn get_day(&self) -> i32 {
118 js!(
119 return @{self}.getDay();
120 ).try_into().unwrap()
121 }
122
123 /// The getFullYear() method returns the year of the specified date according to local time.
124 ///
125 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay)
126 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getfullyear
127 pub fn get_full_year(&self) -> i32 {
128 js!(
129 return @{self}.getFullYear();
130 ).try_into().unwrap()
131 }
132
133 /// The getHours() method returns the hour for the specified date, according to local time.
134 ///
135 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours)
136 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.gethours
137 pub fn get_hours(&self) -> i32 {
138 js!(
139 return @{self}.getHours();
140 ).try_into().unwrap()
141 }
142
143 /// The getMilliseconds() method returns the milliseconds in the specified date according to local time.
144 ///
145 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds)
146 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getmilliseconds
147 pub fn get_milliseconds(&self) -> i32 {
148 js!(
149 return @{self}.getMilliseconds();
150 ).try_into().unwrap()
151 }
152
153 /// The getMinutes() method returns the minutes in the specified date according to local time.
154 ///
155 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes)
156 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getminutes
157 pub fn get_minutes(&self) -> i32 {
158 js!(
159 return @{self}.getMinutes();
160 ).try_into().unwrap()
161 }
162
163 /// The getMonth() method returns the month in the specified date according to local time, as a
164 /// zero-based value (where zero indicates the first month of the year).
165 ///
166 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth)
167 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getmonth
168 pub fn get_month(&self) -> i32 {
169 js!(
170 return @{self}.getMonth();
171 ).try_into().unwrap()
172 }
173
174 /// The getSeconds() method returns the seconds in the specified date according to local time.
175 ///
176 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds)
177 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getseconds
178 pub fn get_seconds(&self) -> i32 {
179 js!(
180 return @{self}.getSeconds();
181 ).try_into().unwrap()
182 }
183
184 /// The getTime() method returns the numeric value corresponding to the time for the specified
185 /// date according to universal time.
186 ///
187 /// getTime() always uses UTC for time representation. For example, a client browser in one timezone,
188 /// getTime() will be the same as a client browser in any other timezone.
189 ///
190 /// You can use this method to help assign a date and time to another Date object. This method is
191 /// functionally equivalent to the valueOf() method.
192 ///
193 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime)
194 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.gettime
195 pub fn get_time(&self) -> f64 {
196 js!(
197 return @{self}.getTime();
198 ).try_into().unwrap()
199 }
200
201 /// The getTimezoneOffset() method returns the time zone difference, in minutes, from current locale (host system settings) to UTC.
202 ///
203 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset)
204 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.gettimezoneoffset
205 pub fn get_timezone_offset(&self) -> i32 {
206 js!(
207 return @{self}.getTimezoneOffset();
208 ).try_into().unwrap()
209 }
210
211 /// The getUTCDate() method returns the day (date) of the month in the specified date according to
212 /// universal time.
213 ///
214 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate)
215 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcdate
216 pub fn get_utc_date(&self) -> i32 {
217 js!(
218 return @{self}.getUTCDate();
219 ).try_into().unwrap()
220 }
221
222 /// The getUTCDay() method returns the day of the week in the specified date according to universal
223 /// time, where 0 represents Sunday.
224 ///
225 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay)
226 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcday
227 pub fn get_utc_day(&self) -> i32 {
228 js!(
229 return @{self}.getUTCDay();
230 ).try_into().unwrap()
231 }
232
233 /// The getUTCFullYear() method returns the year in the specified date according to universal time.
234 ///
235 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear)
236 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcfullyear
237 pub fn get_utc_full_year(&self) -> i32 {
238 js!(
239 return @{self}.getUTCFullYear();
240 ).try_into().unwrap()
241 }
242
243 /// The getUTCHours() method returns the hours in the specified date according to universal time.
244 ///
245 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours)
246 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutchours
247 pub fn get_utc_hours(&self) -> i32 {
248 js!(
249 return @{self}.getUTCHours();
250 ).try_into().unwrap()
251 }
252
253 /// The getUTCMilliseconds() method returns the milliseconds in the specified date according to
254 /// universal time.
255 ///
256 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds)
257 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcmilliseconds
258 pub fn get_utc_milliseconds(&self) -> i32 {
259 js!(
260 return @{self}.getUTCMilliseconds();
261 ).try_into().unwrap()
262 }
263
264 /// The getUTCMinutes() method returns the minutes in the specified date according to universal time.
265 ///
266 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes)
267 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcminutes
268 pub fn get_utc_minutes(&self) -> i32 {
269 js!(
270 return @{self}.getUTCMinutes();
271 ).try_into().unwrap()
272 }
273
274 /// The getUTCMonth() returns the month of the specified date according to universal time, as a
275 /// zero-based value (where zero indicates the first month of the year).
276 ///
277 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth)
278 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcmonth
279 pub fn get_utc_month(&self) -> i32 {
280 js!(
281 return @{self}.getUTCMonth();
282 ).try_into().unwrap()
283 }
284
285 /// The getUTCSeconds() method returns the seconds in the specified date according to universal time.
286 ///
287 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds)
288 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.getutcseconds
289 pub fn get_utc_seconds(&self) -> i32 {
290 js!(
291 return @{self}.getUTCSeconds();
292 ).try_into().unwrap()
293 }
294
295 /// The setDate() method sets the day of the Date object relative to the beginning of the currently set month.
296 ///
297 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate)
298 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setdate
299 pub fn set_date(&self, date: i32) {
300 js!{ @(no_return)
301 @{self}.setDate(@{date});
302 }
303 }
304
305 /// The setFullYear() method sets the full year for a specified date according to local time. Returns new timestamp.
306 ///
307 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear)
308 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setfullyear
309 pub fn set_full_year(&self, full_year: i32) {
310 js!{ @(no_return)
311 @{self}.setFullYear(@{full_year});
312 }
313 }
314
315 /// The setHours() method sets the hours for a specified date according to local time, and returns the number of milliseconds
316 /// since January 1, 1970 00:00:00 UTC until the time represented by the updated Date instance.
317 ///
318 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours)
319 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.sethours
320 pub fn set_hours(&self, hours: i32) {
321 js!{ @(no_return)
322 @{self}.setHours(@{hours});
323 }
324 }
325
326 /// The setMilliseconds() method sets the milliseconds for a specified date according to local time.
327 ///
328 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds)
329 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setmilliseconds
330 pub fn set_milliseconds(&self, milliseconds: i32) {
331 js!{ @(no_return)
332 @{self}.setMilliseconds(@{milliseconds});
333 }
334 }
335
336 /// The setMinutes() method sets the minutes for a specified date according to local time.
337 ///
338 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes)
339 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setminutes
340 pub fn set_minutes(&self, minutes: i32) {
341 js!{ @(no_return)
342 @{self}.setMinutes(@{minutes});
343 }
344 }
345
346 /// The setMonth() method sets the month for a specified date according to the currently set year.
347 ///
348 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth)
349 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setmonth
350 pub fn set_month(&self, month: i32) {
351 js!{ @(no_return)
352 @{self}.setMonth(@{month});
353 }
354 }
355
356 /// The setSeconds() method sets the seconds for a specified date according to local time.
357 ///
358 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds)
359 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setseconds
360 pub fn set_seconds(&self, seconds: i32) {
361 js!{ @(no_return)
362 @{self}.setSeconds(@{seconds});
363 }
364 }
365
366 /// The setTime() method sets the Date object to the time represented by a number of milliseconds since
367 /// January 1, 1970, 00:00:00 UTC.
368 ///
369 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime)
370 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.settime
371 pub fn set_time(&self, time: f64) {
372 js!{ @(no_return)
373 @{self}.setTime(@{time});
374 }
375 }
376
377 /// The setUTCDate() method sets the day of the month for a specified date according to universal time.
378 ///
379 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate)
380 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcdate
381 pub fn set_utc_date(&self, date: i32) {
382 js!{ @(no_return)
383 @{self}.setUTCDate(@{date});
384 }
385 }
386
387 /// The setUTCFullYear() method sets the full year for a specified date according to universal time.
388 ///
389 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear)
390 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcfullyear
391 pub fn set_utc_full_year(&self, full_year: i32) {
392 js!{ @(no_return)
393 @{self}.setUTCFullYear(@{full_year});
394 }
395 }
396
397 /// The setUTCHours() method sets the hour for a specified date according to universal time, and returns the number
398 /// of milliseconds since January 1, 1970 00:00:00 UTC until the time represented by the updated Date instance.
399 ///
400 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours)
401 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutchours
402 pub fn set_utc_hours(&self, hours: i32) {
403 js!{ @(no_return)
404 @{self}.setUTCHours(@{hours});
405 }
406 }
407
408 /// The setUTCMilliseconds() method sets the milliseconds for a specified date according to universal time.
409 ///
410 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds)
411 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcmilliseconds
412 pub fn set_utc_milliseconds(&self, milliseconds: i32) {
413 js!{ @(no_return)
414 @{self}.setUTCMilliseconds(@{milliseconds});
415 }
416 }
417
418 /// The setUTCMinutes() method sets the minutes for a specified date according to universal time.
419 ///
420 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes)
421 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcminutes
422 pub fn set_utc_minutes(&self, minutes: i32) {
423 js!{ @(no_return)
424 @{self}.setUTCMinutes(@{minutes});
425 }
426 }
427
428 /// The setUTCMonth() method sets the month for a specified date according to universal time.
429 ///
430 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth)
431 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcmonth
432 pub fn set_utc_month(&self, month: i32) {
433 js!{ @(no_return)
434 @{self}.setUTCMonth(@{month});
435 }
436 }
437
438 /// The setUTCSeconds() method sets the seconds for a specified date according to universal time.
439 ///
440 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds)
441 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.setutcseconds
442 pub fn set_utc_seconds(&self, seconds: i32) {
443 js!{ @(no_return)
444 @{self}.setUTCSeconds(@{seconds});
445 }
446 }
447
448 /// The toDateString() method returns the date portion of a Date object in human readable form in American English.
449 ///
450 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString)
451 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.todatestring
452 #[inline]
453 pub fn to_date_string(&self) -> String {
454 js!(
455 return @{self}.toDateString();
456 ).try_into().unwrap()
457 }
458
459 /// The toISOString() method returns a string in simplified extended ISO format (ISO 8601), which is always 24 or 27
460 /// characters long (YYYY-MM-DDTHH:mm:ss.sssZ or ±YYYYYY-MM-DDTHH:mm:ss.sssZ, respectively). The timezone is always zero
461 /// UTC offset, as denoted by the suffix "Z".
462 ///
463 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
464 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.toisostring
465 #[inline]
466 pub fn to_iso_string(&self) -> String {
467 js!(
468 return @{self}.toISOString();
469 ).try_into().unwrap()
470 }
471
472 /// The toJSON() method returns a string representation of the Date object.
473 ///
474 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON)
475 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.tojson
476 #[inline]
477 pub fn to_json(&self) -> String {
478 js!(
479 return @{self}.toJSON();
480 ).try_into().unwrap()
481 }
482
483 /// The toString() method returns a string representing the specified Date object.
484 ///
485 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString)
486 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.tostring
487 #[inline]
488 pub fn to_string(&self) -> String {
489 js!(
490 return @{self}.toString();
491 ).try_into().unwrap()
492 }
493
494 /// The toTimeString() method returns the time portion of a Date object in human readable form in American English.
495 ///
496 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString)
497 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.totimestring
498 #[inline]
499 pub fn to_time_string(&self) -> String {
500 js!(
501 return @{self}.toTimeString();
502 ).try_into().unwrap()
503 }
504
505 /// The toUTCString() method converts a date to a string, using the UTC time zone.
506 ///
507 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString)
508 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.toutcstring
509 #[inline]
510 pub fn to_utc_string(&self) -> String {
511 js!(
512 return @{self}.toUTCString();
513 ).try_into().unwrap()
514 }
515
516 /// The valueOf() method returns the primitive value of a Date object.
517 ///
518 /// [(JavaScript docs)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf)
519 // https://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.valueof
520 pub fn value_of(&self) -> f64 {
521 js!(
522 return @{self}.valueOf();
523 ).try_into().unwrap()
524 }
525}
526
527#[cfg(test)]
528mod tests {
529 use super::*;
530
531 #[test]
532 fn test_date_now() {
533 let now = Date::now();
534 assert!( now > 0.0 );
535 }
536
537 #[test]
538 fn test_date_utc() {
539 let now = Date::utc(96, 1, 2, 3, 4, 5, 0);
540 assert_eq!(now, 823230245000.0);
541
542 let now = Date::utc(0, 0, 0, 0, 0, 0, 0);
543 assert_eq!(now, -2209075200000.0);
544 }
545
546 #[test]
547 fn test_date_parse() {
548 let now = Date::parse("01 Jan 1970 00:00:00 GMT");
549 assert_eq!(now, 0.0);
550
551 let now = Date::parse("04 Dec 1995 00:12:00 GMT");
552 assert_eq!(now, 818035920000.0);
553 }
554
555 #[test]
556 fn test_date_get_date() {
557 let now = Date::from_iso8601("August 19, 1975 23:15:30");
558 assert_eq!( now.get_date(), 19);
559 }
560
561 #[test]
562 fn test_date_get_day() {
563 let now = Date::from_iso8601("August 19, 1975 23:15:30");
564 assert_eq!(now.get_day(), 2);
565 }
566
567 #[test]
568 fn test_date_get_full_year() {
569 let now = Date::from_iso8601("August 19, 75 23:15:30");
570 assert_eq!(now.get_full_year(), 1975);
571 }
572
573 #[test]
574 fn test_date_get_hours() {
575 let now = Date::from_iso8601("August 19, 1975 23:15:30");
576 assert_eq!(now.get_hours(), 23);
577 }
578
579 #[test]
580 fn test_date_get_milliseconds() {
581 let now = Date::from_iso8601("August 19, 1975 23:15:30");
582 now.set_milliseconds(123);
583 assert_eq!(now.get_milliseconds(), 123);
584 }
585
586 #[test]
587 fn test_date_get_minutes() {
588 let now = Date::from_iso8601("August 19, 1975 23:15:30");
589 assert_eq!(now.get_minutes(), 15);
590 }
591
592 #[test]
593 fn test_date_get_month() {
594 let now = Date::from_iso8601("August 19, 1975 23:15:30");
595 assert_eq!(now.get_month(), 7);
596 }
597
598 #[test]
599 fn test_date_get_seconds() {
600 let now = Date::from_iso8601("August 19, 1975 23:15:30");
601 assert_eq!(now.get_seconds(), 30);
602 }
603
604 #[test]
605 fn test_date_get_time() {
606 let now = Date::from_iso8601("July 20, 69 00:20:18 GMT+00:00");
607 assert_eq!(now.get_time(), -14254782000.0);
608 }
609
610 #[test]
611 fn test_date_get_timezone_offset() {
612 // this is impossible to test like this, since this function depends on local time only.
613 // and there is no easy way to mock the system time, so the only real thing to check
614 // is that two dates return the same timezone offset.
615 let t1 = Date::from_iso8601("August 19, 1975 23:15:30 GMT+07:00");
616 let t2 = Date::from_iso8601("August 19, 1975 23:15:30 GMT-02:00");
617 assert_eq!(t1.get_timezone_offset(), t2.get_timezone_offset());
618 }
619
620 #[test]
621 fn test_date_get_utc_date() {
622 let now = Date::from_iso8601("August 19, 1975 23:15:30 GMT+11:00");
623 assert_eq!(now.get_utc_date(), 19);
624 let now = Date::from_iso8601("August 19, 1975 23:15:30 GMT-11:00");
625 assert_eq!(now.get_utc_date(), 20);
626 }
627
628 #[test]
629 fn test_date_get_utc_day() {
630 let now = Date::from_iso8601("August 19, 1975 23:15:30 GMT+11:00");
631 assert_eq!( now.get_utc_day(), 2 );
632 let now = Date::from_iso8601("August 19, 1975 23:15:30 GMT-11:00");
633 assert_eq!( now.get_utc_day(), 3 );
634 }
635
636 #[test]
637 fn test_date_get_utc_full_year() {
638 let now = Date::from_iso8601("December 31, 1975 23:15:30 GMT+11:00");
639 assert_eq!(now.get_utc_full_year(), 1975 );
640 let now = Date::from_iso8601("December 31, 1975 23:15:30 GMT-11:00");
641 assert_eq!(now.get_utc_full_year(), 1976 );
642 }
643
644 #[test]
645 fn test_date_get_utc_milliseconds() {
646 let now = Date::from_iso8601("August 19, 1975 23:15:30");
647 now.set_milliseconds(123);
648 assert_eq!(now.get_utc_milliseconds(), 123);
649 }
650
651 #[test]
652 fn test_date_get_utc_minutes() {
653 let now = Date::from_iso8601("August 19, 1975 23:15:30");
654 assert_eq!(now.get_utc_minutes(), 15);
655 }
656
657 #[test]
658 fn test_date_get_utc_month() {
659 let now = Date::from_iso8601("December 31, 1975 23:15:30 GMT+11:00");
660 assert_eq!(now.get_utc_month(), 11);
661 let now = Date::from_iso8601("December 31, 1975 23:15:30 GMT-11:00");
662 assert_eq!(now.get_utc_month(), 0);
663 }
664
665 #[test]
666 fn test_date_set_date() {
667 let now = Date::from_iso8601("August 19, 1975 23:15:30");
668 now.set_date(3);
669 assert_eq!(now.get_date(), 3);
670 }
671
672 #[test]
673 fn test_date_set_full_year() {
674 let now = Date::from_iso8601("August 19, 1975 23:15:30");
675 now.set_full_year(1969);
676 assert_eq!(now.get_full_year(), 1969);
677 }
678
679 #[test]
680 fn test_date_set_hours() {
681 let now = Date::from_iso8601("August 19, 1975 23:15:30");
682 now.set_hours(15);
683 assert_eq!(now.get_hours(), 15);
684 }
685
686 #[test]
687 fn test_date_set_milliseconds() {
688 let now = Date::from_iso8601("August 19, 1975 23:15:30");
689 now.set_milliseconds(123);
690 assert_eq!(now.get_milliseconds(), 123);
691 }
692
693 #[test]
694 fn test_date_set_minutes() {
695 let now = Date::from_iso8601("August 19, 1975 23:15:30");
696 now.set_minutes(42);
697 assert_eq!(now.get_minutes(), 42);
698 }
699
700 #[test]
701 fn test_date_set_month() {
702 let now = Date::from_iso8601("August 19, 1975 23:15:30");
703 now.set_month(9);
704 assert_eq!(now.get_month(), 9);
705 }
706
707 #[test]
708 fn test_date_set_seconds() {
709 let now = Date::from_iso8601("August 19, 1975 23:15:30");
710 now.set_seconds(59);
711 assert_eq!(now.get_seconds(), 59);
712 }
713
714 #[test]
715 fn test_date_set_time() {
716 let now = Date::from_iso8601("August 19, 1975 23:15:30");
717 now.set_time(818035920000.0);
718 assert_eq!(now.to_utc_string(), "Mon, 04 Dec 1995 00:12:00 GMT");
719 }
720
721 #[test]
722 fn test_date_set_utc_date() {
723 let now = Date::from_iso8601("August 19, 1975 23:15:30");
724 now.set_utc_date(3);
725 assert_eq!(now.get_utc_date(), 3);
726 }
727
728 #[test]
729 fn test_date_set_utc_full_year() {
730 let now = Date::from_iso8601("August 19, 1975 23:15:30");
731 now.set_utc_full_year(1969);
732 assert_eq!(now.get_utc_full_year(), 1969);
733 }
734
735 #[test]
736 fn test_date_set_utc_hours() {
737 let now = Date::from_iso8601("August 19, 1975 23:15:30");
738 now.set_utc_hours(15);
739 assert_eq!(now.get_utc_hours(), 15);
740 }
741
742 #[test]
743 fn test_date_set_utc_milliseconds() {
744 let now = Date::from_iso8601("August 19, 1975 23:15:30");
745 now.set_utc_milliseconds(123);
746 assert_eq!(now.get_utc_milliseconds(), 123);
747 }
748
749 #[test]
750 fn test_date_set_utc_minutes() {
751 let now = Date::from_iso8601("August 19, 1975 23:15:30");
752 now.set_utc_minutes(42);
753 assert_eq!(now.get_utc_minutes(), 42);
754 }
755
756 #[test]
757 fn test_date_set_utc_month() {
758 let now = Date::from_iso8601("August 19, 1975 23:15:30");
759 now.set_utc_month(9);
760 assert_eq!(now.get_utc_month(), 9);
761 }
762
763 #[test]
764 fn test_date_set_utc_seconds() {
765 let now = Date::from_iso8601("August 19, 1975 23:15:30");
766 now.set_utc_seconds(59);
767 assert_eq!(now.get_utc_seconds(), 59);
768 }
769
770 #[test]
771 fn test_date_to_date_string() {
772 let now = Date::from_datetime(1993, 6, 28, 14, 39, 7, 0);
773 assert_eq!(now.to_date_string(), "Wed Jul 28 1993");
774 }
775
776 #[test]
777 fn test_date_to_iso_string() {
778 let now = Date::from_iso8601("05 October 2011 14:48 UTC");
779 assert_eq!(now.to_iso_string(), "2011-10-05T14:48:00.000Z");
780 }
781
782 #[test]
783 fn test_date_to_json() {
784 let now = Date::from_iso8601("August 19, 1975 23:15:30 UTC");
785 assert_eq!(now.to_iso_string(), "1975-08-19T23:15:30.000Z");
786 }
787
788 #[test]
789 fn test_date_to_time_string() {
790 // not easy to test this due to time-zones
791 }
792
793 #[test]
794 fn test_date_to_utc_string() {
795 let now = Date::from_time(Date::utc(96, 1, 2, 3, 4, 5, 0));
796 assert_eq!(now.to_utc_string(), "Fri, 02 Feb 1996 03:04:05 GMT");
797 }
798
799 #[test]
800 fn test_date_value_of() {
801 let now = Date::from_time(Date::utc(96, 1, 2, 3, 4, 5, 0));
802 assert_eq!(now.value_of(), 823230245000.0);
803 }
804
805}