Grundlegende Datumsmanipulation in Google Script

10

Ich möchte eine benutzerdefinierte Funktion in Google Sheet definieren. Diese Funktion sollte etwas sehr Einfaches tun, aber ich habe es nicht geschafft, herauszufinden, wie es geht. Ich bin sehr verwirrt mit all den Antworten, die ich lese, weil ich keine eindeutige Referenz zum Umgang mit Daten in Google-Skripten finden kann.

Soweit ich weiß, können grundlegende Datumsmanipulationen durchgeführt werden mit:

  • new Date(): Soweit ich weiß, definiert es ein Objekt, das einige Eigenschaften hat. Ich weiß nicht, wie ich das Datum einer Zelle verwenden und als solches Objekt konvertieren soll.
  • Utilities.formatDate(): Hiermit ändern Sie das Format des Datums, das als Zeichenfolge angezeigt wird .
  • die Bibliothek Moment( http://momentjs.com/ )

Wie kann ich am Ende zwei Daten eingeben (z. B. 31/01/2016) und beispielsweise das Maximum zwischen den beiden finden und den Monat des ersten extrahieren?

function myfun(date1,date2) {  
   // month = month of date 1
   // return maximum(date1,date2);  
}

Ich bin auch interessiert, ob jemand die Umrisse des Umgangs mit Daten erklären oder eine gute Referenz angeben kann.

verstanden
quelle
Vielen Dank. Gibt es keinen anderen Weg? Es scheint unglaublich kompliziert zu sein, zum Beispiel den Monat eines Datums zu extrahieren! Außerdem muss die Zeitzone berücksichtigt werden ... Das ist für einfache (feste) Datumsoperationen etwas verdreht.
anderstood
Ich habe eine Antwort hinzugefügt, die sich auf den Code des Falles konzentriert, der aufgedeckt wurde, aber die Frage ist zwei weit gefasst (Datumsmanipulation). Vielleicht sollten Sie zunächst nach JavaScript-Codefragmenten und Online-Kursen suchen.
Rubén
@ Rubén verstehe ich. Ich wollte keine Frage "Code für mich schreiben" stellen und suchte nach allgemeinen Informationen, die ich nicht wirklich fand. Der von Ihnen angegebene Beitrag von Sergei insas ist hilfreich.
anderstood
Allgemeine Informationen zu JavaScript finden Sie unter developer.mozilla.org/en-US/docs/Web/JavaScript. Informationen zu Google Apps Script finden Sie unter developer.google.com/apps-script .
Rubén

Antworten:

13

Abrufen und Festlegen von Datums- / Uhrzeitwerten

Immer wenn Ihr Skript .getValue()eine Zelle aufruft , die als Datum, Datum / Uhrzeit oder Dauer formatiert ist, erhält es ein JavaScript-Datumsobjekt . Sie können dann verschiedene auf dieser MDN-Seite aufgeführte Methoden auf dieses Objekt anwenden, auch getMonth()für den Monat. Beispiel:

  var sheet = SpreadsheetApp.getActiveSheet();
  var value = sheet.getRange('A1').getValue();  // is a Date object
  Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); 
  // examples of available methods

Umgekehrt können Sie einer Zelle mit ein Datumsobjekt zuweisen setValue, das automatisch als solches formatiert wird.

  sheet.getRange('B2').setValue(new Date());  // current timestamp

Zeitzonen

Der Zeitstempel in Google Sheets befindet sich in der lokalen Zeitzone, die über Datei> Tabellenkalkulationseinstellungen festgelegt wird. Das Skript arbeitet auch in einer Zeitzone, die möglicherweise unterschiedlich ist und sich im Skripteditor unter Datei> Projekteigenschaften befindet. Wenn diese Zeitzonen nicht übereinstimmen, haben Sie ein Problem mit Zeitstempeln.

Um zu überprüfen, ob die Zeitzonen übereinstimmen, können Sie beide manuell vergleichen oder Folgendes tun:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('A1').setFormula('=date(2015,1,1)');
Logger.log(sheet.getRange('A1').getValue().getHours());

Dies gibt die Formel =date(2015,1,1)in die Zelle A1 ein. Das Ergebnis ist 2015-01-01 00:00:00 in der Zeitzone der Tabelle. Das Skript erhält dann das Datum und extrahiert Stunden in der Ortszeit des Skripts. Wenn die Zeitzonen übereinstimmen, sollte im Protokoll 0.0 angezeigt werden.


quelle
4

Kurze Antwort

Im Folgenden werden zwei benutzerdefinierte Funktionen als Beispiele dafür vorgestellt, wie Google Sheets und Google Apps Script mit Datumsangaben arbeiten können.

Beispiel 1: Holen Sie sich das neueste Datum

Holen Sie sich das neueste Datum

function myFunction(date1,date2) {
  return new Date(Math.max(date1,date2)) 
}

Beispiel 2: Ermitteln Sie den Monat des neuesten Datums

function myFunction2(date1,date2) {
  var date = new Date(Math.max(date1,date2));
  return date.getMonth();
}

Kurze Erklärung

Im ersten Beispiel erledigt die Math.max- JavaScript-Methode den Job.

Wenn Sie ein Datum als Ergebnis erhalten möchten, wird ein Datumsobjekt mit new Date () erstellt .

Im zweiten Beispiel wird einer Variablen ein Datumsobjekt zugewiesen. Anschließend wird mit der JavaScript-Methode getMonth () der Monatsindex abgerufen . Beachten Sie, dass JavaScript als Startelement 0für 0Januar, 1Februar usw. verwendet wird.

Verweise

Rubén
quelle
i) Ist date1, date2bestanden als Zahlen ( in der Regel: 54243)? ii) Ich habe jetzt versucht, den Monat der date2Verwendung zu extrahieren , date2.getMonth()aber wenn die Zelle ist 01/12/2015, gibt sie 10 und 11 für zurück 02/12/2015. Ich denke, es liegt an der Zeitzone. Die Blattfunktion month()ist so viel einfacher.
anderstood
Google Sheets behandelt Datumsangaben als Seriennummern wie JavaScript, hat jedoch jeweils ein anderes Startdatum. Wenn Sie also JavaScript-Datumsfunktionen verwenden möchten, sollten Sie zuerst das Tabellenkalkulationsdatum in ein JavaScript-Datum konvertieren. Wie Sie bereits bemerkt haben, besteht der einfachere Weg darin, Tabellenkalkulationsfunktionen zum Behandeln von Tabellenkalkulationsdaten und JavaScript-Funktionen zum Behandeln von JavaScript-Daten zu verwenden.
Rubén
@anderstood: Ich habe ein zweites Beispiel hinzugefügt.
Rubén
Danke nochmal. In Bezug auf das zweite Beispiel, wie ich geschrieben hatte, gibt das Maximum 01.12.2015 myfunction210 zurück und wenn das Maximum 12.02.2015 ist, gibt es 11 zurück. Obwohl ich mit dem 11 in Ordnung bin, verstehe ich nicht Warum gibt 10 für den 01.12.2015 zurück. Wie gesagt, ich glaube, das liegt an GMT, bin mir aber nicht sicher. Vermisse ich etwas
anderstood
@anderstood: Erstellen Sie ein Demo-Spredsheet. Teilen Sie es mit jedem, der den Link nur zur Ansicht hat, und stellen Sie eine neue Frage, einschließlich des Links zur Demo-Tabelle.
Rubén