mirror of https://github.com/tc39/test262.git
Think I've come up with a fix for https://bugs.ecmascript.org/show_bug.cgi?id=11 (Date_library.js):
- juneDate and decemberDate were both one month off. Fixed - LocalTZA wasn't actually LocalTZA as defined in ES5. If we were in DST when this was created, LocalTZA was off by one hour. Fixed - GetSundayInMonth was completely busted (i.e., arithmetic operations on the 'count' param which happens to be a string). Fixed(?) - DaylightSzavingTA was defined incorrectly. It assumed the local time zone adjustment hadn't been accounted for. This wasn't how UTC was calling it. Fixed(?)
This commit is contained in:
parent
ec5dce172d
commit
1b3e926837
|
@ -86,12 +86,16 @@
|
|||
<test id="S10.1.7_A1_T1">Using this pointer, intented for Global object</test>
|
||||
<test id="S7.9_A9_T3">https://bugs.ecmascript.org/show_bug.cgi?id=7</test>
|
||||
<test id="S7.9_A9_T4">https://bugs.ecmascript.org/show_bug.cgi?id=7</test>
|
||||
|
||||
<!--
|
||||
<test id="S15.9.3.1_A5_T1">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
<test id="S15.9.3.1_A5_T2">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
<test id="S15.9.3.1_A5_T3">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
<test id="S15.9.3.1_A5_T4">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
<test id="S15.9.3.1_A5_T5">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
<test id="S15.9.3.1_A5_T6">https://bugs.ecmascript.org/show_bug.cgi?id=11</test>
|
||||
-->
|
||||
|
||||
<test id="S7.5.3_A1.15">https://bugs.ecmascript.org/show_bug.cgi?id=12</test>
|
||||
<test id="S9.9_A1">https://bugs.ecmascript.org/show_bug.cgi?id=13</test>
|
||||
<test id="S9.9_A2">https://bugs.ecmascript.org/show_bug.cgi?id=13</test>
|
||||
|
|
|
@ -33,17 +33,14 @@ var $LocalTZ,
|
|||
return current;
|
||||
}
|
||||
|
||||
var juneDate = new Date(2000, 6, 20, 0, 0, 0, 0);
|
||||
var decemberDate = new Date(2000, 12, 20, 0, 0, 0, 0);
|
||||
var juneDate = new Date(2000, 5, 20, 0, 0, 0, 0);
|
||||
var decemberDate = new Date(2000, 11, 20, 0, 0, 0, 0);
|
||||
var juneOffset = juneDate.getTimezoneOffset();
|
||||
var decemberOffset = decemberDate.getTimezoneOffset();
|
||||
var isSouthernHemisphere = (juneOffset > decemberOffset);
|
||||
var winterTime = isSouthernHemisphere ? juneDate : decemberDate;
|
||||
var summerTime = isSouthernHemisphere ? decemberDate : juneDate;
|
||||
|
||||
$LocalTZ = new Date().getTimezoneOffset() / -60;
|
||||
|
||||
|
||||
var dstStart = findNearestDateBefore(winterTime, function (date) {
|
||||
return date.getTimezoneOffset() == summerTime.getTimezoneOffset();
|
||||
});
|
||||
|
@ -169,6 +166,10 @@ function WeekDay(t) {
|
|||
}
|
||||
|
||||
//15.9.1.9 Daylight Saving Time Adjustment
|
||||
$LocalTZ = (new Date()).getTimezoneOffset() / -60;
|
||||
if (DaylightSavingTA((new Date()).valueOf()) !== 0) {
|
||||
$LocalTZ -= 1;
|
||||
}
|
||||
var LocalTZA = $LocalTZ*msPerHour;
|
||||
|
||||
function DaysInMonth(m, leap) {
|
||||
|
@ -188,6 +189,27 @@ function DaysInMonth(m, leap) {
|
|||
return 28+leap;
|
||||
}
|
||||
|
||||
function GetSundayInMonth(t, m, count){
|
||||
var year = YearFromTime(t);
|
||||
|
||||
if (count==='"first"') {
|
||||
for (var d=1; d <= DaysInMonth(m, InLeapYear(t)); d++) {
|
||||
tempDate = new Date(year, m, d);
|
||||
if (tempDate.getDay()===0) {
|
||||
return tempDate.valueOf();
|
||||
}
|
||||
}
|
||||
} else if(count==='"last"') {
|
||||
for (var d=DaysInMonth(m, InLeapYear(t)); d>0; d--) {
|
||||
tempDate = new Date(year, m, d);
|
||||
if (tempDate.getDay()===0) {
|
||||
return tempDate.valueOf();
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Error("Unsupported 'count' arg:" + count);
|
||||
}
|
||||
/*
|
||||
function GetSundayInMonth(t, m, count){
|
||||
var year = YearFromTime(t);
|
||||
var leap = InLeapYear(t);
|
||||
|
@ -224,20 +246,20 @@ function GetSundayInMonth(t, m, count){
|
|||
}
|
||||
|
||||
return sunday;
|
||||
}
|
||||
}*/
|
||||
|
||||
function DaylightSavingTA(t) {
|
||||
t = t-LocalTZA;
|
||||
// t = t-LocalTZA;
|
||||
|
||||
var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday)
|
||||
+$DST_start_hour*msPerHour
|
||||
+$DST_start_minutes*msPerMinute;
|
||||
var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday) +
|
||||
$DST_start_hour*msPerHour +
|
||||
$DST_start_minutes*msPerMinute;
|
||||
|
||||
var k = new Date(DST_start);
|
||||
|
||||
var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday)
|
||||
+$DST_end_hour*msPerHour
|
||||
+$DST_end_minutes*msPerMinute;
|
||||
var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday) +
|
||||
$DST_end_hour*msPerHour +
|
||||
$DST_end_minutes*msPerMinute;
|
||||
|
||||
if ( t >= DST_start && t < DST_end ) {
|
||||
return msPerHour;
|
||||
|
|
|
@ -1,6 +1,66 @@
|
|||
// Copyright 2009 the Sputnik authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
//the following values are normally generated by the sputnik.py driver
|
||||
var $LocalTZ,
|
||||
$DST_start_month,
|
||||
$DST_start_sunday,
|
||||
$DST_start_hour,
|
||||
$DST_start_minutes,
|
||||
$DST_end_month,
|
||||
$DST_end_sunday,
|
||||
$DST_end_hour,
|
||||
$DST_end_minutes;
|
||||
|
||||
(function () {
|
||||
/**
|
||||
* Finds the first date, starting from |start|, where |predicate|
|
||||
* holds.
|
||||
*/
|
||||
var findNearestDateBefore = function(start, predicate) {
|
||||
var current = start;
|
||||
var month = 1000 * 60 * 60 * 24 * 30;
|
||||
for (var step = month; step > 0; step = Math.floor(step / 3)) {
|
||||
if (!predicate(current)) {
|
||||
while (!predicate(current))
|
||||
current = new Date(current.getTime() + step);
|
||||
current = new Date(current.getTime() - step);
|
||||
}
|
||||
}
|
||||
while (!predicate(current)) {
|
||||
current = new Date(current.getTime() + 1);
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
var juneDate = new Date(2000, 5, 20, 0, 0, 0, 0);
|
||||
var decemberDate = new Date(2000, 11, 20, 0, 0, 0, 0);
|
||||
var juneOffset = juneDate.getTimezoneOffset();
|
||||
var decemberOffset = decemberDate.getTimezoneOffset();
|
||||
var isSouthernHemisphere = (juneOffset > decemberOffset);
|
||||
var winterTime = isSouthernHemisphere ? juneDate : decemberDate;
|
||||
var summerTime = isSouthernHemisphere ? decemberDate : juneDate;
|
||||
|
||||
var dstStart = findNearestDateBefore(winterTime, function (date) {
|
||||
return date.getTimezoneOffset() == summerTime.getTimezoneOffset();
|
||||
});
|
||||
$DST_start_month = dstStart.getMonth();
|
||||
$DST_start_sunday = dstStart.getDate() > 15 ? '"last"' : '"first"';
|
||||
$DST_start_hour = dstStart.getHours();
|
||||
$DST_start_minutes = dstStart.getMinutes();
|
||||
|
||||
var dstEnd = findNearestDateBefore(summerTime, function (date) {
|
||||
return date.getTimezoneOffset() == winterTime.getTimezoneOffset();
|
||||
});
|
||||
$DST_end_month = dstEnd.getMonth();
|
||||
$DST_end_sunday = dstEnd.getDate() > 15 ? '"last"' : '"first"';
|
||||
$DST_end_hour = dstEnd.getHours();
|
||||
$DST_end_minutes = dstEnd.getMinutes();
|
||||
|
||||
return;
|
||||
})();
|
||||
|
||||
|
||||
//15.9.1.2 Day Number and Time within Day
|
||||
function Day(t) {
|
||||
return Math.floor(t/msPerDay);
|
||||
|
@ -106,6 +166,10 @@ function WeekDay(t) {
|
|||
}
|
||||
|
||||
//15.9.1.9 Daylight Saving Time Adjustment
|
||||
$LocalTZ = (new Date()).getTimezoneOffset() / -60;
|
||||
if (DaylightSavingTA((new Date()).valueOf()) !== 0) {
|
||||
$LocalTZ -= 1;
|
||||
}
|
||||
var LocalTZA = $LocalTZ*msPerHour;
|
||||
|
||||
function DaysInMonth(m, leap) {
|
||||
|
@ -125,6 +189,27 @@ function DaysInMonth(m, leap) {
|
|||
return 28+leap;
|
||||
}
|
||||
|
||||
function GetSundayInMonth(t, m, count){
|
||||
var year = YearFromTime(t);
|
||||
|
||||
if (count==='"first"') {
|
||||
for (var d=1; d <= DaysInMonth(m, InLeapYear(t)); d++) {
|
||||
tempDate = new Date(year, m, d);
|
||||
if (tempDate.getDay()===0) {
|
||||
return tempDate.valueOf();
|
||||
}
|
||||
}
|
||||
} else if(count==='"last"') {
|
||||
for (var d=DaysInMonth(m, InLeapYear(t)); d>0; d--) {
|
||||
tempDate = new Date(year, m, d);
|
||||
if (tempDate.getDay()===0) {
|
||||
return tempDate.valueOf();
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Error("Unsupported 'count' arg:" + count);
|
||||
}
|
||||
/*
|
||||
function GetSundayInMonth(t, m, count){
|
||||
var year = YearFromTime(t);
|
||||
var leap = InLeapYear(t);
|
||||
|
@ -161,20 +246,20 @@ function GetSundayInMonth(t, m, count){
|
|||
}
|
||||
|
||||
return sunday;
|
||||
}
|
||||
}*/
|
||||
|
||||
function DaylightSavingTA(t) {
|
||||
t = t-LocalTZA;
|
||||
// t = t-LocalTZA;
|
||||
|
||||
var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday)
|
||||
+$DST_start_hour*msPerHour
|
||||
+$DST_start_minutes*msPerMinute;
|
||||
var DST_start = GetSundayInMonth(t, $DST_start_month, $DST_start_sunday) +
|
||||
$DST_start_hour*msPerHour +
|
||||
$DST_start_minutes*msPerMinute;
|
||||
|
||||
var k = new Date(DST_start);
|
||||
|
||||
var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday)
|
||||
+$DST_end_hour*msPerHour
|
||||
+$DST_end_minutes*msPerMinute;
|
||||
var DST_end = GetSundayInMonth(t, $DST_end_month, $DST_end_sunday) +
|
||||
$DST_end_hour*msPerHour +
|
||||
$DST_end_minutes*msPerMinute;
|
||||
|
||||
if ( t >= DST_start && t < DST_end ) {
|
||||
return msPerHour;
|
||||
|
@ -323,19 +408,4 @@ function ConstructDate(year, month, date, hours, minutes, seconds, ms){
|
|||
var r11 = MakeDate(r9, r10);
|
||||
|
||||
return TimeClip(UTC(r11));
|
||||
}
|
||||
|
||||
|
||||
//the following values are normally generated by the sputnik.py driver
|
||||
// for now, we'll just use 0 for everything
|
||||
/*
|
||||
var $LocalTZ=-8;
|
||||
var $DST_start_month=2;
|
||||
var $DST_start_sunday='first';
|
||||
var $DST_start_hour=2;
|
||||
var $DST_start_minutes=0;
|
||||
var $DST_end_month=10;
|
||||
var $DST_end_sunday='first';
|
||||
var $DST_end_hour=2;
|
||||
var $DST_end_minutes=0;
|
||||
*/
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
|||
{"date":"2011-09-14","numTests":10977,"testSuite":["resources/scripts/testcases/07_Lexical_Conventions.json","resources/scripts/testcases/08_Types.json","resources/scripts/testcases/09_Type_Conversion.json","resources/scripts/testcases/10_Execution_Contexts.json","resources/scripts/testcases/11.10_Binary_Bitwise_Operators.json","resources/scripts/testcases/11.11_Binary_Logical_Operators.json","resources/scripts/testcases/11.12_Conditional_Operator.json","resources/scripts/testcases/11.13_Assignment_Operators.json","resources/scripts/testcases/11.14_Comma_Operator.json","resources/scripts/testcases/11.1_Primary_Expressions.json","resources/scripts/testcases/11.2_Left_Hand_Side_Expressions.json","resources/scripts/testcases/11.3_PostfixExpressions.json","resources/scripts/testcases/11.4_Unary_Operators.json","resources/scripts/testcases/11.5_Multiplicative_Operators.json","resources/scripts/testcases/11.6_Additive_Operators.json","resources/scripts/testcases/11.7_Bitwise_Shift_Operators.json","resources/scripts/testcases/11.8_Relational_Operators.json","resources/scripts/testcases/11.9_Equality_Operators.json","resources/scripts/testcases/12_Statement.json","resources/scripts/testcases/13_Function_Definition.json","resources/scripts/testcases/14_Program.json","resources/scripts/testcases/15.10_RegExp_Objects.json","resources/scripts/testcases/15.11_Error_Objects.json","resources/scripts/testcases/15.12_The_JSON_Object.json","resources/scripts/testcases/15.1_The_Global_Object.json","resources/scripts/testcases/15.2_Object_Objects.json","resources/scripts/testcases/15.3_Function_Objects.json","resources/scripts/testcases/15.4_Array_Objects.json","resources/scripts/testcases/15.5_String_Objects.json","resources/scripts/testcases/15.6_Boolean_Objects.json","resources/scripts/testcases/15.7_Number_Objects.json","resources/scripts/testcases/15.8_The_Math_Object.json","resources/scripts/testcases/15.9_Date_Objects.json","resources/scripts/testcases/chapter07.json","resources/scripts/testcases/chapter08.json","resources/scripts/testcases/chapter10.json","resources/scripts/testcases/chapter11.json","resources/scripts/testcases/chapter12.json","resources/scripts/testcases/chapter13.json","resources/scripts/testcases/chapter14.json","resources/scripts/testcases/15.1.json","resources/scripts/testcases/15.10.json","resources/scripts/testcases/15.11.json","resources/scripts/testcases/15.12.json","resources/scripts/testcases/15.2.3.1.json","resources/scripts/testcases/15.2.3.10.json","resources/scripts/testcases/15.2.3.11.json","resources/scripts/testcases/15.2.3.12.json","resources/scripts/testcases/15.2.3.13.json","resources/scripts/testcases/15.2.3.14.json","resources/scripts/testcases/15.2.3.2.json","resources/scripts/testcases/15.2.3.3.json","resources/scripts/testcases/15.2.3.4.json","resources/scripts/testcases/15.2.3.5.json","resources/scripts/testcases/15.2.3.6.json","resources/scripts/testcases/15.2.3.7.json","resources/scripts/testcases/15.2.3.8.json","resources/scripts/testcases/15.2.3.9.json","resources/scripts/testcases/15.2.4.json","resources/scripts/testcases/15.3.json","resources/scripts/testcases/15.4.3.json","resources/scripts/testcases/15.4.4.10.json","resources/scripts/testcases/15.4.4.12.json","resources/scripts/testcases/15.4.4.14.json","resources/scripts/testcases/15.4.4.15.json","resources/scripts/testcases/15.4.4.16.json","resources/scripts/testcases/15.4.4.17.json","resources/scripts/testcases/15.4.4.18.json","resources/scripts/testcases/15.4.4.19.json","resources/scripts/testcases/15.4.4.20.json","resources/scripts/testcases/15.4.4.21.json","resources/scripts/testcases/15.4.4.22.json","resources/scripts/testcases/15.4.4.4.json","resources/scripts/testcases/15.4.5.json","resources/scripts/testcases/15.5.json","resources/scripts/testcases/15.7.json","resources/scripts/testcases/15.9.json"],"version":"ES5"}
|
||||
{"date":"2011-09-22","numTests":10983,"testSuite":["resources/scripts/testcases/07_Lexical_Conventions.json","resources/scripts/testcases/08_Types.json","resources/scripts/testcases/09_Type_Conversion.json","resources/scripts/testcases/10_Execution_Contexts.json","resources/scripts/testcases/11.10_Binary_Bitwise_Operators.json","resources/scripts/testcases/11.11_Binary_Logical_Operators.json","resources/scripts/testcases/11.12_Conditional_Operator.json","resources/scripts/testcases/11.13_Assignment_Operators.json","resources/scripts/testcases/11.14_Comma_Operator.json","resources/scripts/testcases/11.1_Primary_Expressions.json","resources/scripts/testcases/11.2_Left_Hand_Side_Expressions.json","resources/scripts/testcases/11.3_PostfixExpressions.json","resources/scripts/testcases/11.4_Unary_Operators.json","resources/scripts/testcases/11.5_Multiplicative_Operators.json","resources/scripts/testcases/11.6_Additive_Operators.json","resources/scripts/testcases/11.7_Bitwise_Shift_Operators.json","resources/scripts/testcases/11.8_Relational_Operators.json","resources/scripts/testcases/11.9_Equality_Operators.json","resources/scripts/testcases/12_Statement.json","resources/scripts/testcases/13_Function_Definition.json","resources/scripts/testcases/14_Program.json","resources/scripts/testcases/15.10_RegExp_Objects.json","resources/scripts/testcases/15.11_Error_Objects.json","resources/scripts/testcases/15.12_The_JSON_Object.json","resources/scripts/testcases/15.1_The_Global_Object.json","resources/scripts/testcases/15.2_Object_Objects.json","resources/scripts/testcases/15.3_Function_Objects.json","resources/scripts/testcases/15.4_Array_Objects.json","resources/scripts/testcases/15.5_String_Objects.json","resources/scripts/testcases/15.6_Boolean_Objects.json","resources/scripts/testcases/15.7_Number_Objects.json","resources/scripts/testcases/15.8_The_Math_Object.json","resources/scripts/testcases/15.9_Date_Objects.json","resources/scripts/testcases/chapter07.json","resources/scripts/testcases/chapter08.json","resources/scripts/testcases/chapter10.json","resources/scripts/testcases/chapter11.json","resources/scripts/testcases/chapter12.json","resources/scripts/testcases/chapter13.json","resources/scripts/testcases/chapter14.json","resources/scripts/testcases/15.1.json","resources/scripts/testcases/15.10.json","resources/scripts/testcases/15.11.json","resources/scripts/testcases/15.12.json","resources/scripts/testcases/15.2.3.1.json","resources/scripts/testcases/15.2.3.10.json","resources/scripts/testcases/15.2.3.11.json","resources/scripts/testcases/15.2.3.12.json","resources/scripts/testcases/15.2.3.13.json","resources/scripts/testcases/15.2.3.14.json","resources/scripts/testcases/15.2.3.2.json","resources/scripts/testcases/15.2.3.3.json","resources/scripts/testcases/15.2.3.4.json","resources/scripts/testcases/15.2.3.5.json","resources/scripts/testcases/15.2.3.6.json","resources/scripts/testcases/15.2.3.7.json","resources/scripts/testcases/15.2.3.8.json","resources/scripts/testcases/15.2.3.9.json","resources/scripts/testcases/15.2.4.json","resources/scripts/testcases/15.3.json","resources/scripts/testcases/15.4.3.json","resources/scripts/testcases/15.4.4.10.json","resources/scripts/testcases/15.4.4.12.json","resources/scripts/testcases/15.4.4.14.json","resources/scripts/testcases/15.4.4.15.json","resources/scripts/testcases/15.4.4.16.json","resources/scripts/testcases/15.4.4.17.json","resources/scripts/testcases/15.4.4.18.json","resources/scripts/testcases/15.4.4.19.json","resources/scripts/testcases/15.4.4.20.json","resources/scripts/testcases/15.4.4.21.json","resources/scripts/testcases/15.4.4.22.json","resources/scripts/testcases/15.4.4.4.json","resources/scripts/testcases/15.4.5.json","resources/scripts/testcases/15.5.json","resources/scripts/testcases/15.7.json","resources/scripts/testcases/15.9.json"],"version":"ES5"}
|
Loading…
Reference in New Issue