@@ -1913,7 +1913,8 @@ LibraryManager.library = {
1913
1913
var winterOffset = start . getTimezoneOffset ( ) ;
1914
1914
var dstOffset = Math . min ( winterOffset , summerOffset ) ; // DST is in December in South
1915
1915
if ( dst < 0 ) {
1916
- { { { makeSetValue ( 'tmPtr' , C_STRUCTS . tm . tm_isdst , 'Number(dstOffset == guessedOffset)' , 'i32' ) } } } ;
1916
+ // Attention: some regions don't have DST at all.
1917
+ { { { makeSetValue ( 'tmPtr' , C_STRUCTS . tm . tm_isdst , 'Number(summerOffset != winterOffset && dstOffset == guessedOffset)' , 'i32' ) } } } ;
1917
1918
} else if ( ( dst > 0 ) != ( dstOffset == guessedOffset ) ) {
1918
1919
var nonDstOffset = Math . max ( winterOffset , summerOffset ) ;
1919
1920
var trueOffset = dst > 0 ? dstOffset : nonDstOffset ;
@@ -1995,10 +1996,10 @@ LibraryManager.library = {
1995
1996
{ { { makeSetValue ( 'tmPtr' , C_STRUCTS . tm . tm_yday , 'yday' , 'i32' ) } } } ;
1996
1997
{ { { makeSetValue ( 'tmPtr' , C_STRUCTS . tm . tm_gmtoff , '-(date.getTimezoneOffset() * 60)' , 'i32' ) } } } ;
1997
1998
1998
- // DST is in December in South
1999
+ // Attention: DST is in December in South, and some regions don't have DST at all.
1999
2000
var summerOffset = new Date ( 2000 , 6 , 1 ) . getTimezoneOffset ( ) ;
2000
2001
var winterOffset = start . getTimezoneOffset ( ) ;
2001
- var dst = ( date . getTimezoneOffset ( ) == Math . min ( winterOffset , summerOffset ) ) | 0 ;
2002
+ var dst = ( summerOffset != winterOffset && date . getTimezoneOffset ( ) == Math . min ( winterOffset , summerOffset ) ) | 0 ;
2002
2003
{ { { makeSetValue ( 'tmPtr' , C_STRUCTS . tm . tm_isdst , 'dst' , 'i32' ) } } } ;
2003
2004
2004
2005
var zonePtr = { { { makeGetValue ( makeGlobalUse ( '_tzname' ) , 'dst ? Runtime.QUANTUM_SIZE : 0' , 'i32' ) } } } ;
0 commit comments