তারিখ এবং সময় নিয়ে কাজ করা

Google বিজ্ঞাপন স্ক্রিপ্টগুলিকে প্রায়ই তারিখ এবং সময়ের সাথে কাজ করতে হয়। সাধারণ ব্যবহারের ক্ষেত্রে একটি নির্দিষ্ট তারিখের সীমার জন্য রিপোর্ট পুনরুদ্ধার করা, নির্দিষ্ট সময়ে চালানোর জন্য প্রচারাভিযান বা বিজ্ঞাপন গোষ্ঠী নির্ধারণ করা এবং স্ক্রিপ্টটি শেষবার চালানোর সময় স্প্রেডশীটে আউটপুট করা অন্তর্ভুক্ত। এই গাইডটি Google বিজ্ঞাপন স্ক্রিপ্টে তারিখ ও সময় নিয়ে কাজ করার সময় গুরুত্বপূর্ণ ধারণা, সাধারণ সমস্যা এবং প্রস্তাবিত পদ্ধতির বর্ণনা করে।

মৌলিক ধারণা

Google বিজ্ঞাপন স্ক্রিপ্টে তারিখ ও সময় নিয়ে কাজ করতে, 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);

ডিফল্ট টাইমজোন হল America/Los_Angeles (প্রশান্ত মহাসাগরীয় সময়), Google Ads অ্যাকাউন্টের সাথে যুক্ত টাইমজোন নির্বিশেষে। আপনি যদি লগিং বা অন্যান্য উদ্দেশ্যে একটি কাস্টম বিন্যাস এবং টাইমজোন ব্যবহার করে তারিখ অবজেক্টটিকে একটি স্ট্রিং হিসাবে রেন্ডার করতে চান তবে সর্বদা Utilities.formatDate(date, timeZone, format) ব্যবহার করুন।

একটি তারিখ অবজেক্ট তৈরি করার সময় ডিফল্ট টাইমজোন

টাইমজোন অফসেট প্রদান করে না এমন একটি স্ট্রিং ব্যবহার করে একটি তারিখ অবজেক্ট তৈরি করার সময়, Google বিজ্ঞাপন অ্যাকাউন্টের সাথে যুক্ত টাইমজোন নির্বিশেষে টাইমজোনটিকে আমেরিকা/লস_এঞ্জেলেস (প্যাসিফিক টাইম) বলে ধরে নেওয়া হয়। উদাহরণ স্বরূপ:

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

একটি স্ট্রিং ব্যবহার করে একটি তারিখ অবজেক্ট তৈরি করার সময়, সর্বদা একটি টাইমজোন অফসেট অন্তর্ভুক্ত করুন যাতে নিশ্চিত করা যায় যে তারিখ অবজেক্টটি আপনি আসলে যে মুহূর্তটি চান তা উপস্থাপন করে।

তারিখ অবজেক্ট পদ্ধতিতে ডিফল্ট টাইমজোন

জাভাস্ক্রিপ্ট তারিখ অবজেক্টের বিভিন্ন পদ্ধতি রয়েছে যা একটি ডিফল্ট টাইমজোন ধরে নেয়, যেমন:

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

এর মধ্যে এই পদ্ধতিগুলির set___() সমতুল্য (উদাহরণস্বরূপ, setMonth() ), এবং getTimezoneOffset() অন্তর্ভুক্ত রয়েছে।

Google Ads স্ক্রিপ্টে, ডিফল্ট টাইমজোন হল America/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 UTC এর শুরু থেকে মিলিসেকেন্ডের সংখ্যা প্রদান করে। আপনি এই মানটির উপর গণিত করতে পারেন, তারপর 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)।

একইভাবে, অনেক Google বিজ্ঞাপন স্ক্রিপ্ট অবজেক্টে উপলব্ধ getStatsFor() পদ্ধতির জন্য একই ফর্ম্যাটে তারিখ উল্লেখ করতে হবে। এই বিন্যাসে তারিখ অবজেক্ট ফরম্যাট করতে 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 বিজ্ঞাপন স্ক্রিপ্ট প্রায়ই তারিখ বস্তু সহ একটি স্প্রেডশীটে আউটপুট লেখে। একটি তারিখ অবজেক্ট পাস করে স্প্রেডশীটে একটি সেল সেট করার সময়, স্প্রেডশীটের টাইমজোনটি সেই তারিখটি ব্যাখ্যা করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, ধরুন আমাদের একটি স্প্রেডশীট আছে যার টাইমজোন প্যাসিফিক টাইমে সেট করা আছে:

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

A1-এর মান হবে 17-ফেব্রুয়ারি-21 10:00:00।

আপনার প্রত্যাশা অনুযায়ী তারিখ অবজেক্টগুলি স্প্রেডশীটে লেখা হয়েছে তা নিশ্চিত করতে, আপনার Google বিজ্ঞাপন অ্যাকাউন্টের টাইমজোনের সাথে মেলে স্প্রেডশীটের টাইমজোন সেট করুন:

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

এছাড়াও আপনি একটি স্প্রেডশীটের সময় ম্যানুয়ালি সেট করতে পারেন।