@@ -302,83 +302,32 @@ ecma_date_week_day (ecma_number_t time) /**< time value */
302
302
} /* ecma_date_week_day */
303
303
304
304
/**
305
- * Helper function to get local time zone adjustment.
306
- *
307
- * See also:
308
- * ECMA-262 v5, 15.9.1.7
309
- *
310
- * @return local time zone adjustment
311
- */
312
- static inline ecma_number_t JERRY_ATTR_ALWAYS_INLINE
313
- ecma_date_local_tza (jerry_time_zone_t * tz ) /**< time zone information */
314
- {
315
- return tz -> offset * - ECMA_DATE_MS_PER_MINUTE ;
316
- } /* ecma_date_local_tza */
317
-
318
- /**
319
- * Helper function to get the daylight saving time adjustment.
320
- *
321
- * See also:
322
- * ECMA-262 v5, 15.9.1.8
323
- *
324
- * @return daylight saving time adjustment
325
- */
326
- static inline ecma_number_t JERRY_ATTR_ALWAYS_INLINE
327
- ecma_date_daylight_saving_ta (jerry_time_zone_t * tz , /**< time zone information */
328
- ecma_number_t time ) /**< time value */
329
- {
330
- JERRY_ASSERT (!ecma_number_is_nan (time ));
331
-
332
- /*
333
- * TODO: Fix daylight saving calculation.
334
- * https://github.com/jerryscript-project/jerryscript/issues/1661
335
- */
336
- return tz -> daylight_saving_time * ECMA_DATE_MS_PER_HOUR ;
337
- } /* ecma_date_daylight_saving_ta */
338
-
339
- /**
340
- * Helper function to get local time from UTC.
305
+ * Helper function to get the local time zone offset at a given UTC timestamp.
306
+ * You can add this number to the given UTC timestamp to get local time.
341
307
*
342
308
* See also:
343
309
* ECMA-262 v5, 15.9.1.9
344
310
*
345
- * @return local time
311
+ * @return local time zone adjustment
346
312
*/
347
313
inline ecma_number_t JERRY_ATTR_ALWAYS_INLINE
348
- ecma_date_local_time_zone (ecma_number_t time ) /**< time value */
314
+ ecma_date_local_time_zone_adjustment (ecma_number_t time ) /**< time value */
349
315
{
350
- jerry_time_zone_t tz ;
351
-
352
- if (ecma_number_is_nan (time )
353
- || !jerry_port_get_time_zone (& tz ))
354
- {
355
- return ecma_number_make_nan ();
356
- }
357
-
358
- return ecma_date_local_tza (& tz ) + ecma_date_daylight_saving_ta (& tz , time );
359
- } /* ecma_date_local_time_zone */
316
+ return jerry_port_get_local_time_zone_adjustment (time , true);
317
+ } /* ecma_date_local_time_zone_adjustment */
360
318
361
319
/**
362
- * Helper function to get utc from local time.
320
+ * Helper function to get UTC time from local time.
363
321
*
364
322
* See also:
365
323
* ECMA-262 v5, 15.9.1.9
366
324
*
367
- * @return utc time
325
+ * @return UTC time
368
326
*/
369
327
ecma_number_t
370
328
ecma_date_utc (ecma_number_t time ) /**< time value */
371
329
{
372
- jerry_time_zone_t tz ;
373
-
374
- if (ecma_number_is_nan (time )
375
- || !jerry_port_get_time_zone (& tz ))
376
- {
377
- return ecma_number_make_nan ();
378
- }
379
-
380
- ecma_number_t simple_utc_time = time - ecma_date_local_tza (& tz );
381
- return simple_utc_time - ecma_date_daylight_saving_ta (& tz , simple_utc_time );
330
+ return time - jerry_port_get_local_time_zone_adjustment (time , false);
382
331
} /* ecma_date_utc */
383
332
384
333
/**
@@ -615,7 +564,7 @@ ecma_date_timezone_offset (ecma_number_t time) /**< time value */
615
564
{
616
565
JERRY_ASSERT (!ecma_number_is_nan (time ));
617
566
618
- return (- ecma_date_local_time_zone (time )) / ECMA_DATE_MS_PER_MINUTE ;
567
+ return (- ecma_date_local_time_zone_adjustment (time )) / ECMA_DATE_MS_PER_MINUTE ;
619
568
} /* ecma_date_timezone_offset */
620
569
621
570
/**
@@ -724,7 +673,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
724
673
}
725
674
case LIT_CHAR_LOWERCASE_Z : /* Time zone minutes part. */
726
675
{
727
- int32_t time_zone = (int32_t ) ecma_date_local_time_zone (datetime_number );
676
+ int32_t time_zone = (int32_t ) ecma_date_local_time_zone_adjustment (datetime_number );
728
677
729
678
if (time_zone >= 0 )
730
679
{
@@ -744,7 +693,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
744
693
{
745
694
JERRY_ASSERT (* format_p == LIT_CHAR_UPPERCASE_Z ); /* Time zone seconds part. */
746
695
747
- int32_t time_zone = (int32_t ) ecma_date_local_time_zone (datetime_number );
696
+ int32_t time_zone = (int32_t ) ecma_date_local_time_zone_adjustment (datetime_number );
748
697
749
698
if (time_zone < 0 )
750
699
{
@@ -805,7 +754,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
805
754
ecma_value_t
806
755
ecma_date_value_to_string (ecma_number_t datetime_number ) /**< datetime */
807
756
{
808
- datetime_number += ecma_date_local_time_zone (datetime_number );
757
+ datetime_number += ecma_date_local_time_zone_adjustment (datetime_number );
809
758
return ecma_date_to_string_format (datetime_number , "$W $M $D $Y $h:$m:$s GMT$z:$Z" );
810
759
} /* ecma_date_value_to_string */
811
760
0 commit comments