commit 3f6702e4d0f7017e1b67232fe257ebad22ce2054
parent db5ce1311e5a54f97ad47469f6b82281e00c15fd
Author: Fabrice Bellard <fabrice@bellard.org>
Date: Thu, 11 Jan 2024 15:26:39 +0100
more portable and Windows version for getTimezoneOffset() (github issue #122)
Diffstat:
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/quickjs/quickjs.c b/quickjs/quickjs.c
@@ -43383,14 +43383,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
@@ -43413,9 +43410,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