@@ -302,83 +302,32 @@ ecma_date_week_day (ecma_number_t time) /**< time value */
302302} /* ecma_date_week_day */
303303
304304/**
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.
341307 *
342308 * See also:
343309 * ECMA-262 v5, 15.9.1.9
344310 *
345- * @return local time
311+ * @return local time zone adjustment
346312 */
347313inline 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 */
349315{
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 */
360318
361319/**
362- * Helper function to get utc from local time.
320+ * Helper function to get UTC time from local time.
363321 *
364322 * See also:
365323 * ECMA-262 v5, 15.9.1.9
366324 *
367- * @return utc time
325+ * @return UTC time
368326 */
369327ecma_number_t
370328ecma_date_utc (ecma_number_t time ) /**< time value */
371329{
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);
382331} /* ecma_date_utc */
383332
384333/**
@@ -615,7 +564,7 @@ ecma_date_timezone_offset (ecma_number_t time) /**< time value */
615564{
616565 JERRY_ASSERT (!ecma_number_is_nan (time ));
617566
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 ;
619568} /* ecma_date_timezone_offset */
620569
621570/**
@@ -724,7 +673,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
724673 }
725674 case LIT_CHAR_LOWERCASE_Z : /* Time zone minutes part. */
726675 {
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 );
728677
729678 if (time_zone >= 0 )
730679 {
@@ -744,7 +693,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
744693 {
745694 JERRY_ASSERT (* format_p == LIT_CHAR_UPPERCASE_Z ); /* Time zone seconds part. */
746695
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 );
748697
749698 if (time_zone < 0 )
750699 {
@@ -805,7 +754,7 @@ ecma_date_to_string_format (ecma_number_t datetime_number, /**< datetime */
805754ecma_value_t
806755ecma_date_value_to_string (ecma_number_t datetime_number ) /**< datetime */
807756{
808- datetime_number += ecma_date_local_time_zone (datetime_number );
757+ datetime_number += ecma_date_local_time_zone_adjustment (datetime_number );
809758 return ecma_date_to_string_format (datetime_number , "$W $M $D $Y $h:$m:$s GMT$z:$Z" );
810759} /* ecma_date_value_to_string */
811760
0 commit comments