Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
hier noch kurz für alle eine kleine Info zur Integration der Feiertagsberechnung. In meinem Beispiel setze ich - abhängig vom Feiertag - die Zeit fürs Hochfahren der Jalousien.
Gruss und gutes Neues Jahr
Wolfgang
FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
noch ein kleiner Hinweis: bitte in der Formel zur Berechnung des Ostertages
alle F16 per Suche / Ersetzen durch F32 ersetzen - sonst kommt es ggf. zu kleinen Verschiebungen ( zumindest im Jahr 2014 ! )
Gruss
Wolfgang
FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}
Getreu den vorstehenden Beispielen habe ich seit Anfang 2014 eine Kalenderseite in meiner Visu.
Seit den letzten Patch spinnt die Anzeige der Ostern-abhängigen Feiertage.
Über Weihnachten habe ich das Problem verdrängt und erst jetzt wieder angesehen. Die Fehlanzeige setzt sich leider auch 2015 fort.
Die Berechnung der Feiertage scheint in Ordnung zu sein. Die Relation der festen Feiertage zu den verschieblichen Feiertagen stimmt ebenfalls.
Nur das Makro WE_DatwertToDate zeigt bei Tag und Monat immer den Wert 0 an.
Entweder hat sich hier ein Tippfehler eingeschlichen oder ein Timing im Ablauf zerschießt die Werte. Bis zum Patch lief es monatelang richtig.
Ich seh es leider nicht!! Ich hoffe auf einen Kennerblick
Im Sourceteil ist das Makro und die Eibstudiozeilen.
2 Bilder, Variable und Anzeige
Danke für jede Hilfe!
Wolfgang
Code:
//***************************************************************************
//* WE_DatwertToDate
//***************************************************************************
//* Bestimmt aus Datwert das Datum
//* ( Basierend auf UnixTime von Bernd Meiners ( CodingWettbewerb ) )
//***************************************************************************
:begin WE_DatwertToDate( Name, DayCount )
:info $Wandelt ein Datum auf Basis Datwert in 3 Variablen$ \\
$Name: der Variablen (wird ergänzt um Monat, Day, Year )$ \\
$Die aufzusplittende Unixzeit$
:var c_DatWert@
Name^Monat = 0s32
Name^Tag = 0s32
Name^Date = $$
c_DatWert@ = convert( DayCount, 0s32)
// Rueckrechnung auf absolutes Jahr
Name^Jahr = convert(convert(c_DatWert@, 1f32 ) / 365f32, 1s32) + 1970s32
Name^AnzSchaltTage =(Name^Jahr - 1s32 - 1968s32 ) / 4s32 - (Name^Jahr - 1s32 - 1900s32 ) / 100s32 + \\
(Name^Jahr - 1s32 - 1600s32 ) / 400s32
Name^IstSchaltJahr = (mod(Name^Jahr,4s32) == 0s32 AND \\
( mod( Name^Jahr, 100s32) != 0s32 or mod(Name^Jahr, 400s32)==0s32))
Name^AnzTage = c_DatWert@ - ( Name^Jahr - 1970s32) * 365s32 - Name^AnzSchaltTage
if !Name^IstSchaltJahr then {
if Name^AnzTage > 0s32 and Name^AnzTage <= 31s32 then Name^Monat = 1s32; Name^Tag = Name^AnzTage endif;
if Name^AnzTage > 31s32 and Name^AnzTage <= 59s32 then Name^Monat = 2s32; Name^Tag = Name^AnzTage - 31s32 endif;
if Name^AnzTage > 59s32 and Name^AnzTage <= 90s32 then Name^Monat = 3s32; Name^Tag = Name^AnzTage - 59s32 endif;
if Name^AnzTage > 90s32 and Name^AnzTage <= 120s32 then Name^Monat = 4s32; Name^Tag = Name^AnzTage - 90s32 endif;
if Name^AnzTage > 120s32 and Name^AnzTage <= 151s32 then Name^Monat = 5s32; Name^Tag = Name^AnzTage - 120s32 endif;
if Name^AnzTage > 151s32 and Name^AnzTage <= 181s32 then Name^Monat = 6s32; Name^Tag = Name^AnzTage - 151s32 endif;
if Name^AnzTage > 181s32 and Name^AnzTage <= 212s32 then Name^Monat = 7s32; Name^Tag = Name^AnzTage - 181s32 endif;
if Name^AnzTage > 212s32 and Name^AnzTage <= 243s32 then Name^Monat = 8s32; Name^Tag = Name^AnzTage - 212s32 endif;
if Name^AnzTage > 243s32 and Name^AnzTage <= 273s32 then Name^Monat = 9s32; Name^Tag = Name^AnzTage - 243s32 endif;
if Name^AnzTage > 273s32 and Name^AnzTage <= 304s32 then Name^Monat = 10s32; Name^Tag = Name^AnzTage - 273s32 endif;
if Name^AnzTage > 304s32 and Name^AnzTage <= 334s32 then Name^Monat = 11s32; Name^Tag = Name^AnzTage - 304s32 endif;
if Name^AnzTage > 334s32 and Name^AnzTage <= 365s32 then Name^Monat = 12s32; Name^Tag = Name^AnzTage - 334s32 endif
} endif
if Name^IstSchaltJahr then {
if Name^AnzTage > 0s32 and Name^AnzTage <= 31s32 then Name^Monat = 1s32; Name^Tag = Name^AnzTage endif;
if Name^AnzTage > 31s32 and Name^AnzTage <= 60s32 then Name^Monat = 2s32; Name^Tag = Name^AnzTage - 31s32 endif;
if Name^AnzTage > 60s32 and Name^AnzTage <= 91s32 then Name^Monat = 3s32; Name^Tag = Name^AnzTage - 60s32 endif;
if Name^AnzTage > 91s32 and Name^AnzTage <= 121s32 then Name^Monat = 4s32; Name^Tag = Name^AnzTage - 91s32 endif;
if Name^AnzTage > 121s32 and Name^AnzTage <= 152s32 then Name^Monat = 5s32; Name^Tag = Name^AnzTage - 121s32 endif;
if Name^AnzTage > 152s32 and Name^AnzTage <= 182s32 then Name^Monat = 6s32; Name^Tag = Name^AnzTage - 152s32 endif;
if Name^AnzTage > 182s32 and Name^AnzTage <= 213s32 then Name^Monat = 7s32; Name^Tag = Name^AnzTage - 182s32 endif;
if Name^AnzTage > 213s32 and Name^AnzTage <= 244s32 then Name^Monat = 8s32; Name^Tag = Name^AnzTage - 213s32 endif;
if Name^AnzTage > 244s32 and Name^AnzTage <= 274s32 then Name^Monat = 9s32; Name^Tag = Name^AnzTage - 244s32 endif;
if Name^AnzTage > 274s32 and Name^AnzTage <= 305s32 then Name^Monat = 10s32; Name^Tag = Name^AnzTage - 274s32 endif;
if Name^AnzTage > 305s32 and Name^AnzTage <= 335s32 then Name^Monat = 11s32; Name^Tag = Name^AnzTage - 305s32 endif;
if Name^AnzTage > 335s32 and Name^AnzTage <= 366s32 then Name^Monat = 12s32; Name^Tag = Name^AnzTage - 335s32 endif
} endif
:return Name^Date = convert( Name^Tag, $$ ) + $.$ + convert( Name^Monat, $$ ) + $.$ + convert( Name^Jahr, $$ )
:end
***************************************** die Codezeilen **********************************************************
/* Bestimmung der Kalenderparameter */;
if chtime(01,00,00) or systemstart() then {
c_KalJahr = convert( split( convert(setdate(), $$), 6u16, 9u16 ), 1s32 );
write( '0/0/8's32, c_KalJahr );
c_KalMon = convert( split( convert(setdate(), $$), 3u16, 4u16 ), 1s32 );
c_KalTag = convert( split( convert(setdate(), $$), 0u16, 1u16 ), 1s32 );
c_AktAnzTage = WE_Datwert( c_KalJahr, c_KalMon, c_KalTag );
/* Test ob Feiertag */;
c_TypKalenderTag = WE_IsFeiertag( convert(setdate(),$$) );
} endif
if change('0/0/8's32 ) or systemstart() then {
c_KalJahr = '0/0/8's32;
WE_Ostertag( c_KalJahr, c_KalOster ); /* Berechnung OsterTag */;
c_OsterDayTest = WE_Datwert( c_KalJahr, c_KalOsterMon, c_KalOsterTag );
c_OsterDay = WE_Datwert( c_KalJahr, 4s32, 5s32 );
/* Berechnung der bewegl. Feiertage */;
c_AschermittwochDay = c_OsterDay - 46s32;
c_FaschingsDay = c_AschermittwochDay - 1s32;
c_OstermontagDay = c_OsterDay + 1s32;
c_HimmelfahrtDay = c_OsterDay + 39s32;
c_PfingstDay = c_OsterDay + 49s32;
c_PfingstmontagDay = c_PfingstDay + 1s32;
c_FronleichDay = c_OsterDay + 60s32;
/* Bestimmung der fixen Tage */;
c_NeujahrDay = WE_Datwert( c_KalJahr, 1s32, 1s32 );
c_WeihnachtsDay = WE_Datwert( c_KalJahr, 12s32, 25s32 );
c_Weihnachts2Day = WE_Datwert( c_KalJahr, 12s32, 26s32 );
c_HlDreiKoenigeDay = WE_Datwert( c_KalJahr, 1s32, 6s32 );
c_ErsterMaiDay = WE_Datwert( c_KalJahr, 5s32, 1s32 );
c_TagDerDeutschenEinheitDay = WE_Datwert( c_KalJahr, 10s32, 3s32 );
c_AllerheiligenDay = WE_Datwert( c_KalJahr, 11s32, 1s32 );
/* Bestimmung der DatumStrings wg. Anzeige */;
WE_DatwertToDate( c_Ostern, c_OsterDay );
WE_DatwertToDate( c_Ostermontag, c_OstermontagDay );
WE_DatwertToDate( c_Aschermittwoch, c_AschermittwochDay );
WE_DatwertToDate( c_Fasching, c_FaschingsDay );
WE_DatwertToDate( c_Himmelfahrt, c_HimmelfahrtDay );
WE_DatwertToDate( c_Pfingsten, c_PfingstDay );
WE_DatwertToDate( c_Pfingstmontag, c_PfingstmontagDay );
WE_DatwertToDate( c_Fronleich, c_FronleichDay )
} endif
denke tatsaechlich, dass es die Problematik mit der Jahresberechnung ist - ich
dachte eine Division durch 365 reicht ... Wenn die Schalttage aber nicht beruecksichtigt werden, kann es zu Rundungsproblemen am jahresende kommen ...
Das ganze hat m.E. nichts mit V3 etc. zu tun ... bei mir ist mit der Aenderung ( wg. jahresberechnung ) alles i.o.: s. Anhang.
es ist, bzw. war das Jahr.
Name^Jahr = c_KalJahr behebt das Problem!
Mit einem Rundungsfehler habe ich natürlich nicht gerechnet bei der Fehlersuche.
Wahrscheinlich habe ich auch nach dem Versionswechsel auf Patch 3.019 erstmals wieder den Kalender angesehen. Vor Weihnachten waren ja nicht soviele Feiertage mehr! :-)
Nehmt doch die Änderungen in das Makro auf. Vielleicht hilft es weiteren Nutzern.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar