diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2024-01-11 15:26:39 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-01-11 18:53:33 +0100 |
commit | 3cd5c66c0c2d153c778f3d2bd5efc5d3371ad1bc (patch) | |
tree | 06bc299136b4190497eae214e58f64208108fb07 /lib | |
parent | 7aad80783d414b8cf16fead051876b139f29504c (diff) | |
download | chawan-3cd5c66c0c2d153c778f3d2bd5efc5d3371ad1bc.tar.gz |
more portable and Windows version for getTimezoneOffset() (github issue #122)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/quickjs/quickjs.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/lib/quickjs/quickjs.c b/lib/quickjs/quickjs.c index bb58ad55..e0d0e6dd 100644 --- a/lib/quickjs/quickjs.c +++ b/lib/quickjs/quickjs.c @@ -43281,14 +43281,11 @@ static const JSCFunctionListEntry js_math_obj[] = { /* OS dependent. d = argv[0] is in ms from 1970. Return the difference between UTC time and local time 'd' in minutes */ -static int getTimezoneOffset(int64_t time) { -#if defined(_WIN32) - /* XXX: TODO */ - return 0; -#else +static int getTimezoneOffset(int64_t time) +{ time_t ti; - struct tm tm; - + int res; + time /= 1000; /* convert to seconds */ if (sizeof(time_t) == 4) { /* on 32-bit systems, we need to clamp the time value to the @@ -43311,9 +43308,27 @@ static int getTimezoneOffset(int64_t time) { } } ti = time; - localtime_r(&ti, &tm); - return -tm.tm_gmtoff / 60; +#if defined(_WIN32) + { + struct tm *tm; + time_t gm_ti, loc_ti; + + tm = gmtime(&ti); + gm_ti = mktime(tm); + + tm = localtime(&ti); + loc_ti = mktime(tm); + + res = (gm_ti - loc_ti) / 60; + } +#else + { + struct tm tm; + localtime_r(&ti, &tm); + res = -tm.tm_gmtoff / 60; + } #endif + return res; } #if 0 |