[erledigt] dumme frage: wochentag für ein gegebenes datum anzeigen

Begonnen von the ratman, 06 September 2021, 11:48:23

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

ich suche für eine readingsgroup als zusatz zu einem gegebene datum (das kommt als reading) den wochentag um ihn zusätzlich anzeigen zu können.

bspl.:
> im valueformat steht z.b. {'fc0_date' => '$VALUE<br>XXX', ... }
> $VALUE wäre in dem fall der inhalt eines readings - ein datum - im format 06.09.2021

wie kriege ich den, dem datum entsprechenden wochentag, also z.b. mo, di, mi, .., an die stelle XXX in das valueformat?

für hilfe sehr dankbar,
der immer wieder ahnungslose onkel ratti
→do↑p!dnʇs↓shit←

Otto123

Hi,

ein Stück Perl sollte es bringen, ich weiß prinzipiell das es damit geht und habe auf die Schnelle diese ungeprüfte Stückchen:
my ($d,$m,$y) = split /\./, $VALUE;
   $m         = $m - 1;
   $y         = $y - 1900;
   my $sec       = timelocal(00,00,00, $d, $m, $y);
   my ($tmp, $tmp, $tmp, $tmp, $tmp, $tmp, $wday) = localtime($sec);


In $wday steht dann die Nummer für den Wochentag.
Das mit dem $tmp ist ev. kontra - Du kannst eigentlich die Ausgabe dann beliebig formatieren, siehe auch hier:
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#2
Mal ganz kleinlaut nachgefragt

Weil ich mir auch darüber Gedanken gemacht habe und wirklich auf einen Lösungsansatz kam.

Wäre es soo falsch/umständlich gelöst, es so umzusetzen

Kommandozeile:

{my ($d,$m,$y) = split(/\./,$VALUE);;
$m=$m-1;;
return strftime("%A",localtime(timelocal('0','0','0',$d,$m,$y)))}


Warum ich beim Jahr nix abziehen muss hab ich selbst nicht verstanden.

edit:

Kommandozeile war so zu verstehen, $VALUE fest vergeben :
{my ($d,$m,$y) = split(/\./,"06.09.2021");;
$m=$m-1;;
return strftime("%A",localtime(timelocal('0','0','0',$d,$m,$y)))}


the ratman

kann man mir da bitte ein beispiel geben, wie ich das ins valueformat eintragen kann?
→do↑p!dnʇs↓shit←

TomLee

#4
Keine Ahnung ob man  in der HASH-Version Perl verwenden kann, hab leichte Zweifel und es in der readingsGroup-Definition umzusetzen auch keinen Vorschlag, dazu hab ich bisher zu wenig mit gemacht.

Eine Möglichkeit wäre, wie ich es bisher verstanden habe, ein userReadings in den Devices zu definieren das den oben genannten Code ausführt / zurückgibt, oder ?


edit: nich richtig gelesen, statt xxx

{'<userreadingsname>' => '$VALUE<br>XXX', ... }

the ratman

userreading hab ich auch schon gedacht - wären dann halt ein haufen userreadings in einem eh schon total unübersichtlichen haufen (proplanta), die ich mit einem direkten eintrag in der rg und der "umrechnung" von $value nur einmal machen müßte.

ich will mir keinesfalls irgendwelche perl-spielchen in der myutils oder so einbauen - als "nix-programmierer" ist das dann immer ein horror, wenn ich in 2 jahren dran denken muß, wo ich was wofür eingebastelt hab, ob ich das noch brauch, oder, oder, oder ...
ganz ehrlich gesagt, versteh ich sowieso nicht, warum es mit diesem angeblich so geilen perl nicht mal möglich ist, per "knopfdruck" bestimmte datums-formatierungen zu generieren - so als 08/15 user ohne ahnung kommt einem das extrem wie steinzeit vor.
sorry, mußt mal wieder dampf ablassen *g*
→do↑p!dnʇs↓shit←

TomLee

Versuch mal so, wobei ich jetzt beim schreiben merke das $VALUE evtl. gar nicht existiert in den zusätzlichen geschweiften Klammern ? Hab ich nämlich nicht ausprobiert, aber man kann Perl verwenden wie hier gezeigt:

{'fc0_date' => '{my ($d,$m,$y) = split(/\./,$VALUE);$m=$m-1;return $VALUE."</br>".strftime("%A",localtime(timelocal("0","0","0",$d,$m,$y)))}', ...}

Nobbynews

Zitat von: the ratman am 06 September 2021, 11:48:23
wie kriege ich den, dem datum entsprechenden wochentag, also z.b. mo, di, mi, .., an die stelle XXX in das valueformat?
Ich werfe mal das hier in die Waagschale:
https://www.straub.as/java/basic/Uwochentag.html

the ratman

#8
tomlee's code funzt auf anhieb.

vielen dank fürs hirnschmalz und die hilfe!
→do↑p!dnʇs↓shit←

TomLee

Nix weltbewegendes und nicht wichtig, kam mir eben nur so in den Sinn:

$m=$m-1;

Könnte man noch ändern in

$m-=1;

macht das Ganze noch um zwei  ::) Zeichen kürzer.