तारीख और समय के साथ काम करना

Google Ads स्क्रिप्ट को अक्सर तारीखों और समय के साथ काम करना होता है. इस्तेमाल के सामान्य उदाहरण किसी विशिष्ट तारीख सीमा के लिए रिपोर्ट हासिल करना, कैंपेन शेड्यूल करना या विज्ञापन ग्रुप तय किए गए समय पर चलाए जा सकते हैं. साथ ही, उस समय को स्प्रेडशीट में बदला जा सकता है स्क्रिप्ट पिछली बार चलाई गई थी. इस गाइड में अहम सिद्धांतों के बारे में, सामान्य गलतियों के बारे में, और साथ ही, Google Ads में तारीख और समय के साथ काम करने के लिए, सुझाए गए तरीके स्क्रिप्ट.

बुनियादी सिद्धांत

Google Ads स्क्रिप्ट में तारीख और समय के साथ काम करने के लिए, JavaScript में पहले से मौजूद तारीख का इस्तेमाल करें ऑब्जेक्ट है. JavaScript का तारीख से जुड़ा ऑब्जेक्ट, समय के किसी खास पल को दिखाता है. यह लीजिए नया तारीख ऑब्जेक्ट बनाने के कई तरीके हैं:

// 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);

नई स्क्रिप्ट के उपयोगकर्ता अक्सर इस आधार पर उलझन में पड़ जाते हैं कि तारीख वाले ऑब्जेक्ट, टाइमज़ोन को कैसे हैंडल करते हैं. ऐप्लिकेशन किसी तारीख ऑब्जेक्ट के बारे में सोचने का यह स्वाभाविक लेकिन गलत तरीका है कि किसी एक टाइमज़ोन में देखें. उदाहरण के लिए, ऊपर दिए गए स्निपेट में, कुछ उपयोगकर्ता गलती से यह मान लेना कि date सिर्फ़ एक टाइमज़ोन में मान्य है, जैसे कि -5 घंटे के ऑफ़सेट वाला टाइमज़ोन जिसका इस्तेमाल करके इसे बनाया गया था. उस गलती में दृश्य, date को "रूपांतरित" होना होगा अन्य टाइमज़ोन में इस्तेमाल किया जा सके.

इसके बजाय, तारीख से जुड़ी किसी चीज़ के बारे में सोचने का सही तरीका यह है कि किसी भी समय क्षेत्र से अलग समय में क्षण. हालांकि, खास पल अलग-अलग टाइमज़ोन में घड़ियों पर अलग-अलग तरीके से दिखाए जाते हैं, तो यह एक ही पल होता है. इसके लिए उदाहरण के लिए, इस स्निपेट पर गौर करें:

// 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);

तारीख से जुड़ा ऑब्जेक्ट, समय के किसी खास पल को दिखाता है. इसलिए, इसकी ज़रूरत नहीं होती "रूपांतरित" होगा ट्रैक कर सकते हैं. इसके बजाय, इसे ऐसी स्ट्रिंग के तौर पर रेंडर किया जा सकता है जो किसी खास टाइमज़ोन के लिए, इस फ़ॉर्मैट को फ़ॉर्मैट किया जाता है.

तारीख को किसी खास फ़ॉर्मैट और टाइमज़ोन के साथ स्ट्रिंग के तौर पर रेंडर करने के लिए, Utilities.formatDate(date, timeZone, format). उदाहरण के लिए:

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\''));

इन उदाहरणों ने सीधे टाइमज़ोन का इस्तेमाल करके टाइमज़ोन की जानकारी दी है आईडी. वापस पाने के लिए आपकी स्क्रिप्ट चलाने वाले Google Ads खाते से जुड़ा समय क्षेत्र, इसका इस्तेमाल करें AdsApp.currentAccount().getTimeZone().

सामान्य गलतियां

तारीख से जुड़ा ऑब्जेक्ट लॉग करते समय, डिफ़ॉल्ट टाइमज़ोन

Logger.log() का इस्तेमाल करके, तारीख ऑब्जेक्ट को सीधे लॉग करते समय, इसे इसका इस्तेमाल करके रेंडर किया जाता है एक डिफ़ॉल्ट फ़ॉर्मैट और टाइमज़ोन है. उदाहरण के लिए:

const date = new Date('February 17, 2021 13:00:00 -0500');

// Wed Feb 17 10:00:00 GMT-08:00 2021
console.log(date);

डिफ़ॉल्ट समयक्षेत्र अमेरिका/Los_Angeles (पैसिफ़िक समय) है, भले ही Google Ads खाते से जुड़ा टाइमज़ोन. अगर आपको किसी लाइव स्ट्रीम को लॉगिंग के लिए कस्टम प्रारूप और समय क्षेत्र का उपयोग करके स्ट्रिंग के रूप में तारीख ऑब्जेक्ट या अन्य मकसद के लिए, हमेशा Utilities.formatDate(date, timeZone, format) का इस्तेमाल करें.

तारीख से जुड़ा ऑब्जेक्ट बनाते समय डिफ़ॉल्ट टाइमज़ोन

ऐसी स्ट्रिंग का इस्तेमाल करके तारीख ऑब्जेक्ट बनाते समय, जिसमें टाइमज़ोन नहीं दिया गया है ऑफ़सेट के हिसाब से, टाइमज़ोन को अमेरिका/Los_Angeles (पैसिफ़िक समय) माना जाता है, भले ही, Google Ads खाते का टाइमज़ोन कुछ भी हो. इसके लिए उदाहरण:

// 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);

किसी स्ट्रिंग का इस्तेमाल करके तारीख ऑब्जेक्ट बनाते समय, हमेशा यह पक्का करें कि तारीख ऑब्जेक्ट, उस समय को दिखाता हो जो आपको असल में चाहिए.

तारीख ऑब्जेक्ट के तरीकों में डिफ़ॉल्ट टाइमज़ोन

JavaScript के तारीख से जुड़े ऑब्जेक्ट में कई तरीके होते हैं. ये तरीके डिफ़ॉल्ट टाइमज़ोन के हिसाब से होते हैं, जैसे:

  • getFullYear()
  • getMonth()
  • getDate()
  • getDay()
  • getHours()
  • getMinutes()

इसमें ये तरीके भी शामिल हैं set___() मिलती-जुलती है (उदाहरण के लिए, setMonth()), और getTimezoneOffset().

Google Ads स्क्रिप्ट में, डिफ़ॉल्ट समय क्षेत्र अमेरिका/Los_Angeles (पैसिफ़िक) है समय के आधार पर), Google Ads खाते से जुड़े समय क्षेत्र पर ध्यान दिए बिना. इसलिए, अगर आपका Google Ads खाता इस टाइमज़ोन में नहीं है, तो आपको आम तौर पर इन तरीकों का इस्तेमाल नहीं किया जाता.

अपने कॉलम में, तारीख से जुड़े ऑब्जेक्ट की साल, महीना, तारीख, दिन, घंटे या मिनट की जानकारी पाने के लिए खाते का टाइमज़ोन, Utilities.formatDate(date, timeZone, format) का इस्तेमाल करें के फ़ॉर्मैट में, अपनी पसंद की तारीख या समय के हिस्से के बारे में बताएं और AdsApp.currentAccount().getTimeZone() का इस्तेमाल करें.

फ़ॉर्मैट की गई तारीख की स्ट्रिंग से डेट ऑब्जेक्ट बनाना

फ़ॉर्मैट की गई तारीख की स्ट्रिंग को दी गई तारीख तक पास करके, डेट ऑब्जेक्ट बनाया जा सकता है कंस्ट्रक्टर है. उदाहरण के लिए:

const date = new Date('February 17, 2021 13:00:00 -0500');

कंस्ट्रक्टर, तारीख की स्ट्रिंग के कुछ फ़ॉर्मैट ही पार्स कर सकता है. यह पक्का करने के लिए कि तारीख की स्ट्रिंग सही तरीके से पार्स की गई है, इसे हमेशा MMMM dd, yyyy HH:mm:ss Z फ़ॉर्मैट में दें.

उदाहरण के लिए, मौजूदा खाते के कॉलम में आज दोपहर के लिए डेट ऑब्जेक्ट बनाने के लिए समयक्षेत्र:

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);

'z' का उपयोग न करें किसी तारीख तक पास की जाने वाली तारीख की स्ट्रिंग बनाने का पैटर्न कंस्ट्रक्टर की तरह काम करता है, क्योंकि कंस्ट्रक्टर हमेशा इसे पार्स नहीं कर पाएगा. सिर्फ़ इस्तेमाल करें Z' पैटर्न.

डेट मैथ

कुछ स्क्रिप्ट को तारीखों के साथ आसान गणित करना होता है, जैसे तारीख X ढूंढना दी गई तारीख से दिन पहले या बाद में. तारीख का गणित करते समय, getTime() का इस्तेमाल करें. किसी तारीख ऑब्जेक्ट पर getTime() को कॉल करने से, आज से मिलीसेकंड की संख्या मिलती है 1 जनवरी, 1970 यूटीसी से. इस वैल्यू का हिसाब लगाने के बाद, setTime() का इस्तेमाल करके, तारीख ऑब्जेक्ट पर नई वैल्यू लागू करें या इसे पैरामीटर की मदद से नया तारीख ऑब्जेक्ट बनाते समय.

उदाहरण के लिए:

const MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
const now = new Date();
const yesterday = new Date(now.getTime() - MILLIS_PER_DAY);

इस उदाहरण में, yesterday ठीक 24 घंटे पहले की है.

रिपोर्टिंग

AdsApp.search() का इस्तेमाल करके रिपोर्ट फ़ेच करते समय, GAQL क्वेरी के लिए तारीखें बताना ज़रूरी है yyyy-MM-dd फ़ॉर्मैट में (उदाहरण के लिए, 2021-06-30 30 जून, 2021 होगा).

इसी तरह, getStatsFor() तरीका Google Ads की कई स्क्रिप्ट पर उपलब्ध है ऑब्जेक्ट के लिए तारीखों को उसी फ़ॉर्मैट में तय करना ज़रूरी है. इस्तेमाल की जाने वाली चीज़ें Utilities.formatDate(date, timeZone, format) का इस्तेमाल करें.

उदाहरण के लिए, एक से तीन दिन पहले की किसी रिपोर्ट को फिर से पाने के लिए:

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'));

स्प्रेडशीट

Google Ads स्क्रिप्ट अक्सर स्प्रेडशीट में आउटपुट लिखती हैं, जिसमें तारीख से जुड़े ऑब्जेक्ट शामिल होते हैं. तारीख ऑब्जेक्ट पास करके किसी स्प्रेडशीट में सेल सेट करते समय, उस तारीख की व्याख्या करने के लिए, स्प्रेडशीट के टाइमज़ोन का इस्तेमाल किया जाता है. उदाहरण के लिए, मान लीजिए कि आपके पास एक ऐसी स्प्रेडशीट होनी चाहिए जिसका टाइमज़ोन पैसिफ़िक समय पर सेट हो:

// Suppose today is February 17, 2021 13:00:00 -0500 (Eastern Time)
const now = new Date();
spreadsheet.getRange('A1').setValue(now);

A1 की वैल्यू 17 फ़रवरी, 2021 को 10:00:00 बजे होगी.

यह पक्का करने के लिए कि स्प्रेडशीट में तारीख से जुड़े ऑब्जेक्ट आपकी उम्मीद के मुताबिक लिखे गए हैं, स्प्रेडशीट का टाइमज़ोन, ताकि वह आपके Google Ads खाते के टाइमज़ोन से मैच हो सके:

spreadsheet.setSpreadsheetTimeZone(AdsApp.currentAccount().getTimeZone());

आप किसी स्प्रेडशीट का समय भी सेट कर सकते हैं मैन्युअल तरीके से.