Christoph Haas
270edc7ee5
Does not work with DST yet... Maybe rewrite the js date/timehandling in php.... Status: does not work as expected!
124 lines
4.5 KiB
HTML
124 lines
4.5 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>DST Calculator</title>
|
|
<script type="text/javascript">
|
|
|
|
var myDate = 1361916817000;
|
|
var myTimezone = "Europe/Berlin";
|
|
|
|
function convertDateToUTC(date) {
|
|
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
|
|
}
|
|
|
|
function DisplayDstSwitchDates() {
|
|
var year = convertDateToUTC(new Date(myDate)).getYear();
|
|
alert(year);
|
|
if (year < 1000)
|
|
year += 1900;
|
|
|
|
var firstSwitch = 0;
|
|
var secondSwitch = 0;
|
|
var lastOffset = 99;
|
|
|
|
// Loop through every month of the current year
|
|
for (i = 0; i < 12; i++) {
|
|
// Fetch the timezone value for the month
|
|
var newDate = new Date(Date.UTC(year, i, 0, 0, 0, 0, 0));
|
|
var tz = -1 * newDate.getTimezoneOffset() / 60;
|
|
|
|
// Capture when a timzezone change occurs
|
|
if (tz > lastOffset)
|
|
firstSwitch = i-1;
|
|
else if (tz < lastOffset)
|
|
secondSwitch = i-1;
|
|
|
|
lastOffset = tz;
|
|
}
|
|
|
|
// Go figure out date/time occurences a minute before
|
|
// a DST adjustment occurs
|
|
var secondDstDate = FindDstSwitchDate(year, secondSwitch);
|
|
var firstDstDate = FindDstSwitchDate(year, firstSwitch);
|
|
|
|
if (firstDstDate == null && secondDstDate == null)
|
|
return 'Daylight Savings is not observed in your timezone.';
|
|
else
|
|
return 'Last minute before DST change occurs in ' +
|
|
year + ': ' + firstDstDate + ' and ' + secondDstDate;
|
|
}
|
|
|
|
function FindDstSwitchDate(year, month)
|
|
{
|
|
// Set the starting date
|
|
var baseDate = new Date(Date.UTC(year, month, 0, 0, 0, 0, 0));
|
|
var changeDay = 0;
|
|
var changeMinute = -1;
|
|
var baseOffset = -1 * baseDate.getTimezoneOffset() / 60;
|
|
var dstDate;
|
|
|
|
// Loop to find the exact day a timezone adjust occurs
|
|
for (day = 0; day < 50; day++)
|
|
{
|
|
var tmpDate = new Date(Date.UTC(year, month, day, 0, 0, 0, 0));
|
|
var tmpOffset = -1 * tmpDate.getTimezoneOffset() / 60;
|
|
|
|
// Check if the timezone changed from one day to the next
|
|
if (tmpOffset != baseOffset)
|
|
{
|
|
var minutes = 0;
|
|
changeDay = day;
|
|
|
|
// Back-up one day and grap the offset
|
|
tmpDate = new Date(Date.UTC(year, month, day-1, 0, 0, 0, 0));
|
|
tmpOffset = -1 * tmpDate.getTimezoneOffset() / 60;
|
|
|
|
// Count the minutes until a timezone chnage occurs
|
|
while (changeMinute == -1)
|
|
{
|
|
tmpDate = new Date(Date.UTC(year, month, day-1, 0, minutes, 0, 0));
|
|
tmpOffset = -1 * tmpDate.getTimezoneOffset() / 60;
|
|
|
|
// Determine the exact minute a timezone change
|
|
// occurs
|
|
if (tmpOffset != baseOffset)
|
|
{
|
|
// Back-up a minute to get the date/time just
|
|
// before a timezone change occurs
|
|
tmpOffset = new Date(Date.UTC(year, month,
|
|
day-1, 0, minutes-1, 0, 0));
|
|
changeMinute = minutes;
|
|
break;
|
|
}
|
|
else
|
|
minutes++;
|
|
}
|
|
|
|
// Add a month (for display) since JavaScript counts
|
|
// months from 0 to 11
|
|
dstDate = tmpOffset.getMonth() + 1;
|
|
|
|
// Pad the month as needed
|
|
if (dstDate < 10) dstDate = "0" + dstDate;
|
|
|
|
// Add the day and year
|
|
dstDate += '/' + tmpOffset.getDate() + '/' + year + ' ';
|
|
|
|
// Capture the time stamp
|
|
tmpDate = new Date(Date.UTC(year, month,
|
|
day-1, 0, minutes-1, 0, 0));
|
|
dstDate += tmpDate.toTimeString().split(' ')[0];
|
|
return dstDate;
|
|
}
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<script type="text/javascript">
|
|
document.write("Current date/time: " + convertDateToUTC(new Date(myDate)) + "<br />");
|
|
document.write(DisplayDstSwitchDates());
|
|
</script>
|
|
</body>
|
|
</html> |