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/
Siehe auch https://nodered.org/docs/getting-started/docker
unter „Setting Timezone“. Blöd nur dass im Docker Container „etc/timezone“ nicht vorhanden ist, so dass CET=UTC+1 nicht berechnet werden kann.