diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-30 16:37:14 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-30 16:37:14 -0700 |
commit | cde63dfcbbf0981a09ad0cf8fa28bf7cbe0b6340 (patch) | |
tree | b0651b845463e2e03ade0b618816509cd5157cba | |
parent | 55626711df57e3f675935fb816022da242d023a6 (diff) |
fix gmtime; closes #1366
-rw-r--r-- | src/library.js | 12 | ||||
-rwxr-xr-x | tests/runner.py | 49 |
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''' |