In Verbindung mit Google Ads-Skripts werden oft Datums- und Uhrzeitangaben verwendet. Gängige Anwendungsfälle sind das Abrufen von Berichten für einen bestimmten Zeitraum, das Planen von Kampagnen oder Anzeigengruppen für bestimmte Zeiten und das Ausgeben der Uhrzeit, zu der das Script zuletzt ausgeführt wurde, in einer Tabelle. In diesem Leitfaden werden wichtige Konzepte, häufige Fallstricke, und die empfohlenen Ansätze für das Arbeiten mit Datum und Uhrzeit in Google Ads. Skripts erstellt.
Grundlegende Konzepte
Um Datums- und Uhrzeitangaben in Google Ads-Skripts zu nutzen, verwenden Sie das integrierte Datumsobjekt ("date") von JavaScript. Ein solches Objekt steht für einen ganz bestimmten Zeitpunkt. Es gibt verschiedene Möglichkeiten, ein neues Datumsobjekt zu erstellen:
// Create a date object for the current date and time.
const now = new Date();
// Create a date object for a past date and time using a formatted string.
const date = new Date('February 17, 2021 13:00:00 -0500');
// Create a copy of an existing date object.
let copy = new Date(date);
Neuen Skriptnutzern ist oft nicht ganz klar, wie Zeitzonen von Datumsobjekten behandelt werden. Ein Datumsobjekt kann als Uhrzeit auf einer Uhr in einer einzelnen Zeitzone betrachtet werden. Das ist zwar eine natürliche, aber falsche Vorstellung. Im Beispiel oben gehen einige Nutzer beispielsweise fälschlicherweise davon aus, dass date
nur in einer Zeitzone gültig ist, nämlich in der Zeitzone mit einem Zeitunterschied von -5 Stunden, die zum Erstellen verwendet wurde. In dieser falschen Ansicht müsste date
für die Verwendung in anderen Zeitzonen „konvertiert“ werden.
Tatsächlich steht ein Datumsobjekt jedoch für einen ganz bestimmten Zeitpunkt, der von der Zeitzone unabhängig ist. Auch wenn in diesem Augenblick auf den Uhren in verschiedenen Zeitzonen eine andere Uhrzeit angezeigt wird, handelt es sich um denselben Zeitpunkt. Für Betrachten Sie dieses Snippet:
// Create two date objects with different times and timezone offsets.
const date1 = new Date('February 17, 2021 13:00:00 -0500');
const date2 = new Date('February 17, 2021 10:00:00 -0800');
// getTime() returns the number of milliseconds since the beginning of
// January 1, 1970 UTC.
// True, as the dates represent the same moment in time.
console.log(date1.getTime() == date2.getTime());
// False, as the dates are separate objects, though they happen to
// represent the same moment in time.
console.log(date1 == date2);
Da ein Datumsobjekt für einen ganz bestimmten Zeitpunkt steht, muss es nicht für die verschiedenen Zeitzonen konvertiert werden. Stattdessen kann es als String dargestellt werden, der für eine bestimmte Zeitzone formatiert ist.
Um ein Datum als String mit einem bestimmten Format und einer bestimmten Zeitzone zu rendern, verwenden Sie
Utilities.formatDate(date, timeZone,
format)
Beispiel:
const date = new Date('February 17, 2021 13:00:00 -0500');
// February 17, 2021 13:00:00 -0500
console.log(Utilities.formatDate(date, 'America/New_York', 'MMMM dd, yyyy HH:mm:ss Z'));
// February 17, 2021 10:00:00 -0800
console.log(Utilities.formatDate(date, 'America/Los_Angeles', 'MMMM dd, yyyy HH:mm:ss Z'));
// 2021-02-17T18:00:00.000Z
console.log(Utilities.formatDate(date, 'Etc/GMT', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS\'Z\''));
In diesen Beispielen wird die Zeitzone direkt mithilfe einer Zeitzone angegeben.
ID angeben. So rufen Sie den
Zeitzone des Google Ads-Kontos, in dem Ihr Skript ausgeführt wird, verwenden Sie
AdsApp.currentAccount().getTimeZone()
Häufige Schwierigkeiten
Standardzeitzone bei der Erfassung eines Datumsobjekts
Beim direkten Logging eines Datumsobjekts mit Logger.log()
wird dieses mithilfe von
Standardformat und -zeitzone festlegen. Beispiel:
const date = new Date('February 17, 2021 13:00:00 -0500');
// Wed Feb 17 10:00:00 GMT-08:00 2021
console.log(date);
Die Standardzeitzone ist PST (Los Angeles) – unabhängig davon, welche Zeitzone für das Google Ads-Konto festgelegt ist. Wenn Sie
Das Datumsobjekt als String mit einem benutzerdefinierten Format und einer benutzerdefinierten Zeitzone für die Protokollierung oder
für andere Zwecke verwenden Sie immer Utilities.formatDate(date, timeZone,
format)
.
Standardzeitzone beim Erstellen eines Datumsobjekts
Wenn Sie ein Datumsobjekt mit einem String erstellen, der keinen Zeitzonenoffset enthält, wird davon ausgegangen, dass die Zeitzone „America/Los_Angeles“ (pazifische Zeit) ist, unabhängig von der mit dem Google Ads-Konto verknüpften Zeitzone. Beispiel:
// Create a date without specifying the timezone offset.
const date = new Date('February 17, 2021 13:00:00');
// Wed Feb 17 13:00:00 GMT-08:00 2021
console.log(date);
Fügen Sie beim Erstellen eines Datumsobjekts mit einem String immer einen Zeitzonenversatz für dass das Datumsobjekt den gewünschten Zeitpunkt darstellt.
Standardzeitzone in Datumsobjektmethoden
JavaScript-Datumsobjekte haben mehrere Methoden, die eine Standardzeitzone annehmen, z. B.:
getFullYear()
getMonth()
getDate()
getDay()
getHours()
getMinutes()
Dazu gehören auch die set___()
-Entsprechungen (z. B.
setMonth()
) und getTimezoneOffset()
.
In Google Ads-Scripts ist die Standardzeitzone „America/Los_Angeles“ (UTC−08:00) festgelegt, unabhängig von der mit dem Google Ads-Konto verknüpften Zeitzone. Sofern Ihr Google Ads-Konto nicht in dieser Zeitzone liegt, sollten Sie diese Methoden daher grundsätzlich vermeiden.
Wenn Sie das Jahr, den Monat, den Tag, die Stunden oder die Minuten für ein Datumsobjekt in der Zeitzone Ihres Kontos abrufen möchten, verwenden Sie Utilities.formatDate(date, timeZone,
format)
mit einem Format, das den gewünschten Teil des Datums oder der Uhrzeit angibt. Verwenden Sie AdsApp.currentAccount().getTimeZone()
, um die Zeitzone Ihres Kontos abzurufen.
Datumsobjekt auf der Grundlage eines formatierten Datumsstrings erstellen
Sie können ein Datumsobjekt erstellen, indem Sie einen formatierten Datumsstring an den Datumskonstruktor übergeben. Beispiel:
const date = new Date('February 17, 2021 13:00:00 -0500');
Der Konstruktor kann nur bestimmte Datumsstringformate parsen. Damit Ihr Datumsstring richtig geparst wird, geben Sie ihn immer im MMMM dd, yyyy
HH:mm:ss Z
-Format an.
So erstellen Sie beispielsweise ein Datumsobjekt für heute Mittag in der Zeitzone des aktuellen Kontos:
const now = new Date();
const timeZone = AdsApp.currentAccount().getTimeZone();
const noonString = Utilities.formatDate(now, timeZone, 'MMMM dd, yyyy 12:00:00 Z');
const noon = new Date(noonString);
Das "z" darf nicht verwendet werden. Muster zum Erstellen von Datumszeichenfolgen, die an ein Datum übergeben werden -Konstruktor, da der Konstruktor ihn nicht immer parsen kann. Verwenden Sie nur das Z‑Muster.
Datumsberechnungen
Bei einigen Skripts müssen einfache Berechnungen für Datumsangaben angestellt werden, etwa um das Datum zu finden, das X Tage vor oder nach dem angegebenen Datum liegt. Verwende für Datumsberechnungen getTime()
.
Wenn Sie getTime()
auf ein Datumsobjekt anwenden, wird die Anzahl der Millisekunden seit dem 1. Januar 1970 (UTC) zurückgegeben. Sie können Berechnungen mit diesem Wert durchführen,
Wenden Sie den neuen Wert mithilfe von setTime()
auf ein Datumsobjekt an oder geben Sie ihn als
wenn Sie ein neues Datumsobjekt erstellen.
Beispiel:
const MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
const now = new Date();
const yesterday = new Date(now.getTime() - MILLIS_PER_DAY);
In diesem Beispiel ist yesterday
genau vor 24 Stunden.
Berichte
Wenn Sie einen Bericht mit AdsApp.search()
abrufen,
Für die GAQL-Abfrage müssen Datumsangaben angegeben werden
im Format yyyy-MM-dd
(z. B. wäre 2021-06-30
der 30. Juni 2021).
Entsprechend wird die Methode getStatsFor()
in vielen Google Ads-Skripts verwendet.
-Objekten müssen Datumsangaben im selben Format angegeben werden. Verwenden Sie
Utilities.formatDate(date, timeZone,
format)
, um ein Datumsobjekt in diesem Format zu formatieren.
Beispielcode, mit dem ein Bericht für die Zeit vor 24 bis 72 Stunden abgerufen wird:
const MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
const now = new Date();
const from = new Date(now.getTime() - 3 * MILLIS_PER_DAY);
const to = new Date(now.getTime() - 1 * MILLIS_PER_DAY);
const timeZone = AdsApp.currentAccount().getTimeZone();
const results = AdsApp.search(
'SELECT campaign.name, metrics.clicks' +
'FROM campaign ' +
'WHERE segments.date BETWEEN ' +
Utilities.formatDate(from, timeZone, 'yyyy-MM-dd') + ' AND ' +
Utilities.formatDate(to, timeZone, 'yyyy-MM-dd'));
Tabellen
Bei Google Ads-Skripts wird die Ausgabe oft in eine Tabelle geschrieben, etwa im Fall von Datumsobjekten. Wenn Sie eine Zelle in einer Tabelle festlegen, indem Sie ein Datumsobjekt übergeben, werden diese Daten auf der Grundlage der Zeitzone der Tabelle ausgewertet. Angenommen, wir eine Tabelle mit der Zeitzone Pacific Time:
// Suppose today is February 17, 2021 13:00:00 -0500 (Eastern Time)
const now = new Date();
spreadsheet.getRange('A1').setValue(now);
Der Wert in A1 lautet 17-Feb-21 10:00:00.
Um sicherzustellen, dass Datumsobjekte wie erwartet in eine Tabelle geschrieben werden, verwenden Sie für die Tabelle die Zeitzone Ihres Google Ads-Kontos:
spreadsheet.setSpreadsheetTimeZone(AdsApp.currentAccount().getTimeZone());
Sie können auch in einer Tabelle die Uhrzeit manuell.