mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 13:44:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			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;
 | 
						|
})();
 |