Berechnungen mit Daten  GELÖST

Anwenderaustausch zur PhraseExpress Makroprogrammierung
Post Reply
Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Berechnungen mit Daten

Post by Praia » 04 Oct 19, 03:45

Moin zusammen,

eigentlich ganz einfach aber dennoch so schwer.
Kommt aus der Anfrage:
http://www.bartelsmedia.com/forum/viewt ... 1286f4623f

Ich möchte nur zwei Daten von einander abziehen und herrausbekommen wieviel Tage unterschied es sind. Wichtig hier, es sollte + oder - beachten. Also ob die Differenz positiv (Zukunft) oder Negativ (Vergangenheit) ist
Also ab ins Verdammnis.

Code: Select all

{#settemp -name ##orderd_on -content {#formcalendar -f dd/mm/yyyy -head Select ordered on date}}(*
*){#settemp -name ##day_offset -content {#formeditbox -text ± how many days? for delivery -def +5 -single -required}}(*
*){#settemp -name ##due_day -content {#datetime -f dd/mm/yyyy -s {#gettemp ##day_offset}w -value {#gettemp ##orderd_on}}}(*
*)-------------------------

Ordered on  - {#gettemp ##orderd_on}
Day offset - {#gettemp ##day_offset}
Due Day -  {#gettemp ##due_day}   <-- "ordered on" plus "x"Tage im offset

calc3: {#check -text {#gettemp ##du_day} -case < {#gettemp ##orderd_on} -output Should arrive on: {#gettemp ##du_day} -else arrive in: {#datecalc -date2 {#gettemp ##due_day} -mode 3} days}
ergibt nur positive Ergebnisse:

-------------------------

Ordered on - 04.10.2019
Day offset - +5
Due Day - 11.10.2019 <-- "ordered on" plus "x"Tage im offset

calc3: arrive in: 5 days <-- korrect

-------------------------

Ordered on - 03.10.2019
Day offset - +5
Due Day - 10.10.2019 <-- "ordered on" plus "x"Tage im offset

calc3: arrive in: 4 days <-- korrect

-------------------------

Ordered on - 30.09.2019
Day offset - +5
Due Day - 07.10.2019 <-- "ordered on" plus "x"Tage im offset

calc3: arrive in: 1 days <-- korrect

-------------------------

Ordered on - 27.09.2019
Day offset - +5
Due Day - 04.10.2019 <-- "ordered on" plus "x"Tage im offset

calc3: arrive in: 0 days <-- korrect

-------------------------

Ordered on - 26.09.2019
Day offset - +5
Due Day - 03.10.2019 <-- "ordered on" plus "x"Tage im offset

calc3: arrive in: 1 days <-- FALSCH sollte -1 sein


Wie kann man das hinbekommen?

Dies ergibt was ganz komisches.

Code: Select all

calc4: {#datetime -f dd.mm.yyyy -value {#gettemp ##due_day}}-{#datetime -f dd.mm.yyyy -value {#gettemp ##orderd_on}} = {#calc {#datetime -f dd.mm.yyyy -value {#gettemp ##due_day}}-{#datetime -f dd.mm.yyyy -value {#gettemp ##orderd_on}}}
calc4: 23.09.2019-16.09.2019 = 7000000,00

Hab verschidene Sachen schon versucht, bekomme es einfach nicht hin. Hab ich ein Denkfehler?

Gruß

Peter Stotz
PhraseExpress Expert
Posts: 850
Joined: 27 Feb 08, 15:07

Post by Peter Stotz » 04 Oct 19, 12:20

@Praia / @ technischer Support

Berechnungen mit Datumdifferenzen in Tagen z.B.
{#datecalc -date1 04.10.2019 -date2 10.10.2019 -mode 2}
ergeben offenbar stets positive Werte - dieses Makroverhalten sollte überdacht/überprüft werden...

Die Verwendung von #datetime mit dem Parameter -a ist eine andere Möglichkeit, Tagesdifferenzen von Datumwerten vorzeichenrichtig zu berechnen.
Ein Beispiel siehe http://www.bartelsmedia.com/forum/viewt ... 1286f4623f ,
Beitrag by Peter Stotz » 01 Oct 19, 15:58 :
Number of days too late: {#calc {#datetime -a -value {#gettemp ##relative_date} -locale en-029}-{#datetime -a -value {#gettemp ##reference_date} -locale en-029} -round 0} days

Peter
Windows 10 - PhraseExpress v14.0.164

Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Post by Praia » 16 Nov 19, 20:20

@ technischer Support

Gibts hierzu schon etwas neues?

Gruß

Technical Support
Posts: 2489
Joined: 10 Feb 06, 22:23

Post by Technical Support » 18 Nov 19, 10:05

Ja, in der aktuellsten PhraseExpress Version kann die Ausgabe von #datecalc auch negativ sein.

Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Post by Praia » 18 Nov 19, 19:54

Das is ja echt SUPER.

Hab den Phrase mal angepasst und nun ergibt sich eine Frage...
Ich komm nicht drauf wie ich den negatiewen Wert negieren kann. Heisst.. Momentan gibt er mir "arrived -2 days ago" aus, sieht etwas doof aus. "arrived 2 days ago" sieht schon viel besser aus.

Hier der Phrase

Code: Select all

{#settemp -name ##orderd_on -content {#formcalendar -f dd/mm/yyyy -head Select ordered on date}}(*
*){#settemp -name ##day_offset -content {#formeditbox -text ± how many days? for delivery -def +5 -single -required}}(*
*){#settemp -name ##due_day -content {#datetime -f dd/mm/yyyy -s {#gettemp ##day_offset}w -value {#gettemp ##orderd_on}}}(*
*){#settemp -name ##days -content {#datecalc -date2 {#gettemp ##due_day} -mode 3}}
-------------------------
Ordered on  - {#gettemp ##orderd_on}
Day offset - {#gettemp ##day_offset}
Due Day -  {#gettemp ##due_day}   <-- "ordered on" plus "x"Tage im offset

{#check -text {#gettemp ##days} -case >= 1 -output should arrive in {#gettemp ##days} days.|== 0 -output should arrive today.|<= -2 -output should have arrived {#gettemp ##days} days ago. -else should have arrived {#gettemp ##days} day ago.}
Und hier mal der Output. Finde es super das ich nun auch "days" und "day" und "today" errechnen kann.

-------------------------
Ordered on - 18.11.2019
Day offset - +5
Due Day - 25.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive in 5 days.
-------------------------
Ordered on - 15.11.2019
Day offset - +5
Due Day - 22.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive in 4 days.
-------------------------
Ordered on - 14.11.2019
Day offset - +5
Due Day - 21.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive in 3 days.
-------------------------
Ordered on - 13.11.2019
Day offset - +5
Due Day - 20.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive in 2 days.
-------------------------
Ordered on - 12.11.2019
Day offset - +5
Due Day - 19.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive in 1 days.
-------------------------
Ordered on - 11.11.2019
Day offset - +5
Due Day - 18.11.2019 <-- "ordered on" plus "x"Tage im offset

should arrive today.
-------------------------
Ordered on - 08.11.2019
Day offset - +5
Due Day - 15.11.2019 <-- "ordered on" plus "x"Tage im offset

should have arrived -1 day ago.
-------------------------
Ordered on - 07.11.2019
Day offset - +5
Due Day - 14.11.2019 <-- "ordered on" plus "x"Tage im offset

should have arrived -2 days ago.

Danke

Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Post by Praia » 18 Nov 19, 19:57

should arrive in 1 days... da muss ich noch nachbessern

Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Post by Praia » 18 Nov 19, 21:21

Ich habs, aber glaub es gibt eine bessere Lösung?

Code: Select all

{#settemp -name ##orderd_on -content {#formcalendar -f dd/mm/yyyy -head Select ordered on date}}(*
*){#settemp -name ##day_offset -content {#formeditbox -text ± how many days? for delivery -def +5 -single -required}}(*
*){#settemp -name ##due_day -content {#datetime -f dd/mm/yyyy -s {#gettemp ##day_offset}w -value {#gettemp ##orderd_on}}}(*
*){#settemp -name ##days -content {#datecalc -date2 {#gettemp ##due_day} -mode 3}}
-------------------------
Ordered on  - {#gettemp ##orderd_on}
Day offset - {#gettemp ##day_offset}
Due Day -  {#gettemp ##due_day}   <-- "ordered on" plus "x"Tage im offset

{#check -text {#gettemp ##days} -case >= 1 -output should arrive in {#gettemp ##days} days.|== 0 -output should arrive today.|>= -1 -output should have arrived {#check -text  {#gettemp ##days}  -case < 0 -output {#calc {#gettemp ##days} *-1 -round auto}} day ago. -else should have arrived {#check -text  {#gettemp ##days}  -case < 0 -output {#calc {#gettemp ##days} *-1 -round auto}} days ago.}

Peter Stotz
PhraseExpress Expert
Posts: 850
Joined: 27 Feb 08, 15:07

Post by Peter Stotz » 21 Nov 19, 16:45

@Praia
Order tracking - hier mein Vorschlag zum Ausprobieren (leicht anpassbar an veränderte Darstellungen):

Code: Select all

(* 20191121 • Order tracking (demo)
   Formulareingaben
*){#settemp -name ##orderd_on -content {#formcalendar -f ddddd -head Select ordered on date}}(*
*){#settemp -name ##day_offset -content {#formeditbox -text ± how many days? for delivery -def +5 -single -required}}(*
*){#settemp -name ##due_day -content {#datetime -f ddddd -s {#gettemp ##day_offset}w -value {#gettemp ##orderd_on}}}(*
*){#settemp -name ##days -content {#datecalc -date2 {#gettemp ##due_day} -mode 3}}(* 
  Anzeige der Eingaben zur Prüfung
*)-------------------------
Ordered on: {#gettemp ##orderd_on} umformatiert: {#datetime -f dd'/'mm'/'yyyy -value {#gettemp ##orderd_on}}
Day offset: {#gettemp ##day_offset} weekday{#check -text {#calc abs({#gettemp ##day_offset}) -round 0} -case != 1 -output s}
Due Day   : {#gettemp ##due_day} umformatiert: {#datetime -f dd'/'mm'/'yyyy -value {#gettemp ##due_day}} ← "ordered on" plus "x" Werktage im offset

(* 
  Ergebnisausgabe (berücksichtigt Ein- und Mehrzahlangaben)
*){#check -text {#gettemp ##days} -case < 0 -output should have arrived {#calc abs({#gettemp ##days}) -round 0} weekday{#check -text {#gettemp ##days} -case != -1 -output s} ago.|== 0 -output should arrive today.|== 1 -output should arrive in {#gettemp ##days} weekday. -else should arrive in {#gettemp ##days} weekdays.}
Peter
Windows 10 - PhraseExpress v14.0.168

Praia
Posts: 79
Joined: 01 Apr 14, 01:06

Post by Praia » 21 Nov 19, 22:25

Hi Peter,

sehr schön. Wie immer ein großen Dank. Wieder was gelent.

Gruß

Post Reply