Google Ads স্ক্রিপ্টকে প্রায়ই তারিখ ও সময় নিয়ে কাজ করতে হয়। সাধারণত যেসব ক্ষেত্রে এটি ব্যবহার করা হয় তার মধ্যে রয়েছে নির্দিষ্ট তারিখের রেঞ্জের জন্য রিপোর্ট পাওয়া, নির্দিষ্ট সময়ে ক্যাম্পেন বা বিজ্ঞাপন গ্রুপ শিডিউল করা এবং স্ক্রিপ্ট শেষবার কখন রান করেছে সেই সময় স্প্রেডশিটে আউটপুট হিসেবে দেখানো। এই নির্দেশিকা Google Ads স্ক্রিপ্টে তারিখ ও সময় নিয়ে কাজ করার সময় গুরুত্বপূর্ণ ধারণা, সাধারণ ত্রুটি এবং সাজেস্ট করা পদ্ধতি বর্ণনা করে।
প্রাথমিক ধারণা
Google Ads স্ক্রিপ্টে তারিখ ও সময় নিয়ে কাজ করতে, 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, 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\''));
এই উদাহরণে টাইম জোন আইডি ব্যবহার করে সরাসরি টাইম জোন উল্লেখ করা হয়েছে।
আপনার স্ক্রিপ্ট রান করছে এমন Google Ads অ্যাকাউন্টের সাথে যুক্ত টাইম জোন ফিরিয়ে আনতে,
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 অ্যাকাউন্টের সাথে
যুক্ত টাইম জোন যাই হোক না কেন। আপনি যদি লগিং বা অন্য কোনও উদ্দেশ্যে কাস্টম ফর্ম্যাট এবং টাইম জোন ব্যবহার করে তারিখ অবজেক্টকে স্ট্রিং হিসেবে রেন্ডার করতে চান, তাহলে সবসময়
Utilities.formatDate(date, timeZone, format) ব্যবহার করুন।
তারিখ অবজেক্ট তৈরি করার সময় ডিফল্ট টাইম জোন
টাইম জোন অফসেট প্রদান করে না এমন স্ট্রিং ব্যবহার করে তারিখ অবজেক্ট তৈরি করার সময়, টাইম জোনকে আমেরিকা/লস অ্যাঞ্জেলেস (প্যাসিফিক টাইম) হিসেবে ধরে নেওয়া হয়, Google Ads অ্যাকাউন্টের সাথে যুক্ত টাইম জোন যাই হোক না কেন। যেমন:
// 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() অন্তর্ভুক্ত।
Google Ads স্ক্রিপ্টে, ডিফল্ট টাইম জোন হল আমেরিকা/লস_অ্যাঞ্জেলস (প্যাসিফিক টাইম), Google Ads অ্যাকাউন্টের সাথে যুক্ত টাইম জোন যাই হোক না কেন। তাই, আপনার Google Ads অ্যাকাউন্ট এই টাইম জোনে না থাকলে, সাধারণত এইসব পদ্ধতি ব্যবহার করা এড়িয়ে যাওয়া উচিত।
আপনার অ্যাকাউন্টের টাইম জোনে কোনও তারিখ অবজেক্টের বছর, মাস, তারিখ, দিন, ঘণ্টা বা মিনিট পেতে,
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 মানে
৩০ জুন, ২০২৫)।
একইভাবে, অনেক Google Ads স্ক্রিপ্ট অবজেক্টে উপলভ্য 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 Ads স্ক্রিপ্ট প্রায়ই তারিখ অবজেক্ট সহ স্প্রেডশিটে আউটপুট লেখে। কোনও তারিখ অবজেক্ট পাস করে স্প্রেডশিটে কোনও সেল সেট করার সময়, সেই তারিখ ব্যাখ্যা করার জন্য স্প্রেডশিটের টাইম জোন ব্যবহার করা হয়। যেমন, ধরুন আমাদের কাছে একটি স্প্রেডশিট আছে যার টাইম জোন প্যাসিফিক টাইম হিসেবে সেট করা আছে:
// 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।
তারিখ অবজেক্ট যাতে আপনার প্রত্যাশা অনুযায়ী স্প্রেডশিটে লেখা হয় তা নিশ্চিত করতে, স্প্রেডশিটের টাইম জোন আপনার Google Ads অ্যাকাউন্টের টাইম জোনের সাথে মিলিয়ে সেট করুন:
spreadsheet.setSpreadsheetTimeZone(AdsApp.currentAccount().getTimeZone());
এছাড়াও, আপনি ম্যানুয়ালি স্প্রেডশিটের সময় সেট করতে পারবেন।