0

Datum + 1 ergibt eine Woche später

Laut Dokumentation (und natürlich finde ich die Stelle in diesem Chaos jetzt nicht wieder) sollte

datum := datum + 1

einen Tag zum Datum addieren (also z.B. aus dem 14.2.2023 den 15.2.2023 machen). Stattdessen werden es hier 7 Tage. Muss ich

datum := datum + 1/7

schreiben, um einen Tag zu bekommen? Oder stimmt die Dokumentation einfach nicht, und es ist halt eine Woche? Oder existiert eine andere Möglichkeit, ein Datum um eine feste, determinierte Zahl von Tagen zu verschieben?

4 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Christian, wenn 'datum' wirklich ein Feld vom Typ "Datum" ist, dann sollte das "+ 1" wie beschrieben funktionieren. Das heißt, Ninox rechnet einen Tag hinzu. Eine ganze Woche würde nur bei "+ 7" hinzugerechnet. Ich vermute deshalb, dass 'datum' bei dir kein normales Datumsfeld ist oder noch weiterer Code reinspielt.

    Davon abgesehen empfehle ich (aus verschiedenen Gründen) bei Datumsberechnungen immer die date()-Funktion zu nutzen. Also, um wie im Beispiel einen Tag zu addieren: 

    datum := date(year(datum), month(datum), day(datum) + 1)
    
    • Christian.5
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi planox.pro,

     

    ich habe mir das noch mal angeschaut, und es sieht zumindest im Bearbeiten-Modus einwandfrei wie ein Datumsfeld aus:

    Die zugehörige Funktion

    if Tage != 0 then
        let termine := (select Orte where Ankunft >= Ankunft);
        for termin in termine do
            Ankunft := Ankunft + 1 ;
            Abfahrt := Abfahrt + 1 ;
        end
    end
    

    ist einem Button zugeordnet. Das hier ist schon die abgespeckte Fassung, eigentlich soll sie den Wert von `Tage` zu Ankunft und Abfahrt addieren.

    Ich habe es jetzt mit der von dir vorgeschlagenen Formel probiert (Ankunft = date(year(Ankunft)…) – das Ergebnis ist exakt dasselbe, d.h. aus dem 14.3.2023 wird der 21.3.2021.

    • Christian.5
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Nachtrag: Jetzt ist mir aufgefallen, dass das `select` sehr merkwürdig aussah. Habe es umgebaut zu

    let alteAnkunft := Ankunft;
     let termine := (select Orte where Ankunft >= alteAnkunft);
    

    Und jetzt funktioniert das Script so, wie es soll. Was ich etwas eigenartig finde, aber bitte – das `select` war ja in der alten Form ohnehin Quatsch.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian 

      Wenn man in einer Schleife Datensatz für Datensatz durchgeht, dann muss man den Feldbezeichnungen die Schleifen-Variable voranstellen:

      for termin in termine do
              termin.Ankunft := termin.Ankunft + 1 ;
              termin.Abfahrt := termin.Abfahrt + 1 ;
          end

      Sonst wird immer wieder dasselbe Feld geändert, was in deinem Fall offenbar bei sieben Schleifendurchläufen zum Endergebnis + 7 geführt hat.