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

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

মৌলিক ধারণা

গুগল অ্যাডস স্ক্রিপ্টে তারিখ ও সময় নিয়ে কাজ করার জন্য, জাভাস্ক্রিপ্টের বিল্ট-ইন ডেট অবজেক্ট ব্যবহার করুন। একটি জাভাস্ক্রিপ্ট ডেট অবজেক্ট সময়ের একটি নির্দিষ্ট মুহূর্তকে বোঝায়। একটি নতুন ডেট অবজেক্ট তৈরি করার কয়েকটি উপায় রয়েছে:

// 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, 2025 13:00:00 -0500');

// Create a copy of an existing date object.
let copy = new Date(date);

নতুন স্ক্রিপ্ট ব্যবহারকারীরা প্রায়শই ডেট অবজেক্ট কীভাবে টাইম জোন পরিচালনা করে তা নিয়ে বিভ্রান্ত হন। একটি ডেট অবজেক্টকে একটি নির্দিষ্ট টাইম জোনের ঘড়ির সময় হিসাবে ভাবা একটি স্বাভাবিক কিন্তু ভুল ধারণা। উদাহরণস্বরূপ, আগের কোড স্নিপেটে, কিছু ব্যবহারকারী ভুলবশত ধরে নেন যে date শুধুমাত্র একটি টাইম জোনেই বৈধ, আর তা হলো -৫ ঘণ্টার অফসেটযুক্ত সেই টাইম জোনটি যা এটি তৈরি করতে ব্যবহৃত হয়েছিল। এই ভুল ধারণা অনুযায়ী, অন্যান্য টাইম জোনে ব্যবহার করার জন্য date "রূপান্তরিত" করার প্রয়োজন হবে।

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

// Create two date objects with different times and time zone offsets.
const date1 = new Date('February 17, 2025 13:00:00 -0500');
const date2 = new Date('February 17, 2025 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, 2025 13:00:00 -0500');

// February 17, 2025 13:00:00 -0500
console.log(Utilities.formatDate(date, 'America/New_York', 'MMMM dd, yyyy HH:mm:ss Z'));

// February 17, 2025 10:00:00 -0800
console.log(Utilities.formatDate(date, 'America/Los_Angeles', 'MMMM dd, yyyy HH:mm:ss Z'));

// 2025-02-17T18:00:00.000Z
console.log(Utilities.formatDate(date, 'Etc/GMT', 'yyyy-MM-dd\'T\'HH:mm:ss.SSS\'Z\''));

এই উদাহরণগুলিতে একটি টাইমজোন আইডি ব্যবহার করে সরাসরি টাইমজোন নির্দিষ্ট করা হয়েছে। আপনার স্ক্রিপ্টটি যে গুগল অ্যাডস অ্যাকাউন্টে চলছে, তার সাথে যুক্ত টাইমজোনটি পেতে AdsApp.currentAccount().getTimeZone() ব্যবহার করুন।

সাধারণ ভুলত্রুটি

তারিখ সংক্রান্ত কিছু সাধারণ ভুল নিচে দেওয়া হলো।

একটি তারিখ অবজেক্ট লগ করার সময় ডিফল্ট সময় অঞ্চল

Logger.log() ব্যবহার করে সরাসরি কোনো ডেট অবজেক্ট লগ করার সময়, এটি একটি ডিফল্ট ফরম্যাট এবং টাইম জোন ব্যবহার করে রেন্ডার করা হয়। উদাহরণস্বরূপ:

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

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

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

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

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

// Create a date without specifying the time zone offset.
const date = new Date('February 17, 2025 13:00:00');

// Mon Feb 17 13:00:00 GMT-08:00 2025
console.log(date);

স্ট্রিং ব্যবহার করে ডেট অবজেক্ট তৈরি করার সময়, সর্বদা একটি টাইম জোন অফসেট অন্তর্ভুক্ত করুন, যাতে ডেট অবজেক্টটি আপনার কাঙ্ক্ষিত সময়কেই প্রতিনিধিত্ব করে।

ডেট অবজেক্ট মেথডগুলিতে ডিফল্ট টাইম জোন

জাভাস্ক্রিপ্ট ডেট অবজেক্টে এমন বেশ কিছু মেথড আছে যেগুলো একটি ডিফল্ট টাইম জোন ধরে নেয়, যেমন:

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

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

গুগল অ্যাডস স্ক্রিপ্টগুলিতে, গুগল অ্যাডস অ্যাকাউন্টের সাথে যুক্ত টাইম জোন নির্বিশেষে ডিফল্ট টাইম জোন হলো আমেরিকা/লস অ্যাঞ্জেলেস (প্যাসিফিক টাইম)। সুতরাং, আপনার গুগল অ্যাডস অ্যাকাউন্টটি এই টাইম জোনে না থাকলে, সাধারণত এই পদ্ধতিগুলি ব্যবহার করা থেকে বিরত থাকা উচিত।

আপনার অ্যাকাউন্টের টাইম জোনে কোনো ডেট অবজেক্টের বছর, মাস, তারিখ, দিন, ঘন্টা বা মিনিট পেতে, Utilities.formatDate(date, timeZone, format) ব্যবহার করুন এবং ফরম্যাট হিসেবে তারিখ বা সময়ের কাঙ্ক্ষিত অংশটি উল্লেখ করুন। এরপর আপনার অ্যাকাউন্টের টাইম জোন পেতে AdsApp.currentAccount().getTimeZone() ব্যবহার করুন।

ফরম্যাট করা তারিখ স্ট্রিং থেকে একটি তারিখ অবজেক্ট তৈরি করা

আপনি ডেট কনস্ট্রাক্টরে একটি ফরম্যাট করা তারিখ স্ট্রিং পাস করে একটি ডেট অবজেক্ট তৈরি করতে পারেন। উদাহরণস্বরূপ:

const date = new Date('February 17, 2025 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() কল করলে, এটি ১ জানুয়ারী, ১৯৭০ UTC-এর শুরু থেকে মিলিসেকেন্ডের সংখ্যা ফেরত দেয়। আপনি এই মানটির উপর গাণিতিক কাজ করতে পারেন, তারপর setTime() ব্যবহার করে নতুন মানটি ডেট অবজেক্টে প্রয়োগ করতে পারেন অথবা নতুন ডেট অবজেক্ট তৈরি করার সময় এটিকে একটি প্যারামিটার হিসাবে প্রদান করতে পারেন।

উদাহরণস্বরূপ:

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

এই উদাহরণে, yesterday ঠিক ২৪ ঘন্টা আগের ঘটনা।

রিপোর্টিং

AdsApp.search() ব্যবহার করে কোনো রিপোর্ট পুনরুদ্ধার করার সময়, GAQL কোয়েরিতে তারিখ অবশ্যই yyyy-MM-dd ফরম্যাটে উল্লেখ করতে হয় (উদাহরণস্বরূপ, 2025-06-30 অর্থ হবে June 30, 2025)।

একইভাবে, অনেক গুগল অ্যাডস স্ক্রিপ্ট অবজেক্টে উপলব্ধ 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'));

স্প্রেডশিট

গুগল অ্যাডস স্ক্রিপ্টগুলো প্রায়শই একটি স্প্রেডশিটে আউটপুট লেখে, যার মধ্যে ডেট অবজেক্টও থাকে। একটি ডেট অবজেক্ট পাস করে স্প্রেডশিটের কোনো সেল সেট করার সময়, সেই তারিখটি নির্ধারণ করতে স্প্রেডশিটটির টাইম জোন ব্যবহার করা হয়। উদাহরণস্বরূপ, ধরুন আমাদের একটি স্প্রেডশিট আছে যার টাইম জোন প্যাসিফিক টাইম-এ সেট করা আছে:

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

A1-এ থাকা মানটি হবে 17-Feb-25 10:00:00।

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

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

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