Sommerzeit/Winterzeit

Noch gibt es sie, die Sommerzeit und die Winterzeit. Gerade bei der Rolladensteuerung habe ich deutliche Auswirkungen der Zeitumstellung festgestellt. Daher musste eine Sommerzeit/Winterzeit-Unterscheidung her.

Der Funktionsblock muss auf zwei Ausgänge gestellt werden. Oben ist die Winterzeit, unten die Sommerzeit. Unter msg.yeartime ist auch die entsprechende Zeit hinterlegt.

var today = new Date();
var monat = today.getMonth()+1;
var tag = today.getDate();
var thisYearS;
var thisYearW;
var thisYearSDays = 0;
var thisYearWDays = 0;

function isLeapYear( year ) {
	if ( ( year % 4 === 0 && year % 100 !== 0 ) || year % 400 === 0 ) return true;
	else return false;
}
function calcLeapYear( year, days ) {
	if ( isLeapYear( year ) ) return ++days;
	else return days;
}
function subToSunday( myDate, year, days, prevMonthDays ) {
	for ( i = myDate.getDay() ; i > 0 ; i-- ) {
		days--;
	}
	days -= prevMonthDays;
	days = isLeapYear( year ) ? --days : days;
	return days;
}

	year = today.getFullYear();
	thisYearS = new Date( year,  3, 0, 0, 0, 0 );
	thisYearW = new Date( year, 10, 0, 0, 0, 0 );
	thisYearSDays = nextYearSDays = 90;
	thisYearWDays = nextYearWDays = 304;

	thisYearSDays = calcLeapYear( year, thisYearSDays );
	thisYearWDays = calcLeapYear( year, thisYearWDays );

	thisYearSDays = subToSunday( thisYearS, year, thisYearSDays, 59 );
	thisYearWDays = subToSunday( thisYearW, year, thisYearWDays, 273 );
	
	node.status({fill:"grey",shape:"ring",text:thisYearSDays + ".03." + year + " - " + thisYearWDays + ".10." + year});
	
	
if((monat < 4 && tag < thisYearSDays) || monat < 3 || monat > 10 || (monat > 9 && tag > thisYearWDays)) { // Winterzeit
            msg.yeartime = "Winterzeit";
            return [msg, null];
}
else {  // Sommerzeit 
        msg.yeartime = "Sommerzeit";
        return [null, msg];
}

Das JavaScript basiert auf dem Script von https://www.kostenlose-javascripts.de/javascripts/datum-und-uhrzeit/zeitumstellung/

Ein Gedanke zu „Sommerzeit/Winterzeit“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert