aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-30 16:37:14 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-30 16:37:14 -0700
commitcde63dfcbbf0981a09ad0cf8fa28bf7cbe0b6340 (patch)
treeb0651b845463e2e03ade0b618816509cd5157cba
parent55626711df57e3f675935fb816022da242d023a6 (diff)
fix gmtime; closes #1366
-rw-r--r--src/library.js12
-rwxr-xr-xtests/runner.py49
2 files changed, 57 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js
index b45ef8db..6613335b 100644
--- a/src/library.js
+++ b/src/library.js
@@ -6144,9 +6144,14 @@ LibraryManager.library = {
{{{ makeSetValue('tmPtr', 'offsets.tm_wday', 'date.getUTCDay()', 'i32') }}}
{{{ makeSetValue('tmPtr', 'offsets.tm_gmtoff', '0', 'i32') }}}
{{{ makeSetValue('tmPtr', 'offsets.tm_isdst', '0', 'i32') }}}
-
- var start = new Date(date.getFullYear(), 0, 1);
- var yday = Math.round((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
+ var start = new Date(date); // define date using UTC, start from Jan 01 00:00:00 UTC
+ start.setUTCDate(1);
+ start.setUTCMonth(0);
+ start.setUTCHours(0);
+ start.setUTCMinutes(0);
+ start.setUTCSeconds(0);
+ start.setUTCMilliseconds(0);
+ var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
{{{ makeSetValue('tmPtr', 'offsets.tm_yday', 'yday', 'i32') }}}
var timezone = "GMT";
@@ -6157,7 +6162,6 @@ LibraryManager.library = {
return tmPtr;
},
-
timegm__deps: ['mktime'],
timegm: function(tmPtr) {
_tzset();
diff --git a/tests/runner.py b/tests/runner.py
index 976772ce..0261c85a 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -5025,6 +5025,55 @@ The current type of b is: 9
'''
self.do_run(src, 'time: ') # compilation check, mainly
+ def test_gmtime(self):
+ src = r'''
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+
+ int main(void)
+ {
+ time_t t=time(NULL);
+ struct tm *ptm=gmtime(&t);
+ struct tm tmCurrent=*ptm;
+ int hour=tmCurrent.tm_hour;
+
+ t-=hour*3600; // back to midnight
+ for(hour=0;hour<24;hour++)
+ {
+ ptm=gmtime(&t);
+ // tm_yday must be constant all day...
+ printf("yday: %d, hour: %d\n", ptm->tm_yday, hour);
+ t+=3600; // add one hour
+ }
+ return(0);
+ }
+ '''
+ self.do_run(src, '''yday: 210, hour: 0
+yday: 210, hour: 1
+yday: 210, hour: 2
+yday: 210, hour: 3
+yday: 210, hour: 4
+yday: 210, hour: 5
+yday: 210, hour: 6
+yday: 210, hour: 7
+yday: 210, hour: 8
+yday: 210, hour: 9
+yday: 210, hour: 10
+yday: 210, hour: 11
+yday: 210, hour: 12
+yday: 210, hour: 13
+yday: 210, hour: 14
+yday: 210, hour: 15
+yday: 210, hour: 16
+yday: 210, hour: 17
+yday: 210, hour: 18
+yday: 210, hour: 19
+yday: 210, hour: 20
+yday: 210, hour: 21
+yday: 210, hour: 22
+yday: 210, hour: 23
+''')
def test_strptime_tm(self):
src=r'''