mirror of https://github.com/tc39/test262.git
84 lines
2.8 KiB
JavaScript
84 lines
2.8 KiB
JavaScript
|
//Date_constants.js
|
||
|
// Copyright 2009 the Sputnik authors. All rights reserved.
|
||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||
|
|
||
|
var HoursPerDay = 24;
|
||
|
var MinutesPerHour = 60;
|
||
|
var SecondsPerMinute = 60;
|
||
|
|
||
|
var msPerDay = 86400000;
|
||
|
var msPerSecond = 1000;
|
||
|
var msPerMinute = 60000;
|
||
|
var msPerHour = 3600000;
|
||
|
|
||
|
var date_1899_end = -2208988800001;
|
||
|
var date_1900_start = -2208988800000;
|
||
|
var date_1969_end = -1;
|
||
|
var date_1970_start = 0;
|
||
|
var date_1999_end = 946684799999;
|
||
|
var date_2000_start = 946684800000;
|
||
|
var date_2099_end = 4102444799999;
|
||
|
var date_2100_start = 4102444800000;
|
||
|
|
||
|
// 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;
|
||
|
})();
|