সপ্তাহের প্রথম দিনটি পেতে আমার দ্রুততম উপায় প্রয়োজন। উদাহরণস্বরূপ: আজ 11 নভেম্বর, এবং একটি বৃহস্পতিবার; এবং আমি এই সপ্তাহের প্রথম দিনটি চাই, এটি নভেম্বরের ৮ ই ও সোমবার চাই। আমার কাছে মংগোডিবি মানচিত্রের জন্য দ্রুততম পদ্ধতি দরকার, কোনও ধারণা?
সপ্তাহের প্রথম দিনটি পেতে আমার দ্রুততম উপায় প্রয়োজন। উদাহরণস্বরূপ: আজ 11 নভেম্বর, এবং একটি বৃহস্পতিবার; এবং আমি এই সপ্তাহের প্রথম দিনটি চাই, এটি নভেম্বরের ৮ ই ও সোমবার চাই। আমার কাছে মংগোডিবি মানচিত্রের জন্য দ্রুততম পদ্ধতি দরকার, কোনও ধারণা?
উত্তর:
getDay
তারিখের অবজেক্টগুলির পদ্ধতিটি ব্যবহার করে আপনি সপ্তাহের দিনের সংখ্যা (0 = রবিবার, 1 = সোমবার ইত্যাদি) জানতে পারবেন।
তারপরে আপনি সেই সংখ্যাটি আরও এক যোগ করতে পারেন, উদাহরণস্বরূপ:
function getMonday(d) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
return new Date(d.setDate(diff));
}
getMonday(new Date()); // Mon Nov 08 2010
diff = d.getDate() - day;
d.setHours(0); d.setMinutes(0); d.setSeconds(0);
এটি কীভাবে পারফরম্যান্সের সাথে তুলনা করে তা নিশ্চিত নয় তবে এটি কাজ করে।
var today = new Date();
var day = today.getDay() || 7; // Get current day number, converting Sun. to 7
if( day !== 1 ) // Only manipulate the date if it isn't Mon.
today.setHours(-24 * (day - 1)); // Set the hours to day number minus 1
// multiplied by negative 24
alert(today); // will be Monday
বা একটি ফাংশন হিসাবে:
# modifies _date_
function setToMonday( date ) {
var day = date.getDay() || 7;
if( day !== 1 )
date.setHours(-24 * (day - 1));
return date;
}
setToMonday(new Date());
date = new Date(date);
GetMonday ফাংশনে প্রথম লাইন হিসাবে স্থাপন করা সহজতম সমাধান ।
পরীক্ষা করে দেখুন Date.js
Date.today().previous().monday()
Date.parse('last monday');
সিএমএসের উত্তরটি সঠিক তবে ধরে নিয়েছেন যে সোমবার সপ্তাহের প্রথম দিন।
চ্যান্ডলার জাওয়োলের উত্তর সঠিক তবে ডেট প্রোটোটাইপের সাথে ফিডস।
অন্যান্য উত্তরগুলি যা ঘন্টা / মিনিট / সেকেন্ড / মিলিসেকেন্ডের সাথে খেলতে পারে তা ভুল।
নীচের ফাংশনটি সঠিক এবং এটি প্রথম প্যারামিটার হিসাবে এবং সপ্তাহের কাঙ্ক্ষিত প্রথম দিনটিকে দ্বিতীয় প্যারামিটার হিসাবে গ্রহণ করে (0 রবিবারের জন্য, সোমবারের জন্য 1 ইত্যাদি)। দ্রষ্টব্য: দিনের শুরু করতে ঘন্টা, মিনিট এবং সেকেন্ড 0 তে সেট করা আছে।
function firstDayOfWeek(dateObject, firstDayOfWeekIndex) {
const dayOfWeek = dateObject.getDay(),
firstDayOfWeek = new Date(dateObject),
diff = dayOfWeek >= firstDayOfWeekIndex ?
dayOfWeek - firstDayOfWeekIndex :
6 - dayOfWeek
firstDayOfWeek.setDate(dateObject.getDate() - diff)
firstDayOfWeek.setHours(0,0,0,0)
return firstDayOfWeek
}
// August 18th was a Saturday
let lastMonday = firstDayOfWeek(new Date('August 18, 2018 03:24:00'), 1)
// outputs something like "Mon Aug 13 2018 00:00:00 GMT+0200"
// (may vary according to your time zone)
document.write(lastMonday)
var dt = new Date(); // current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var wkStart = new Date(new Date(dt).setDate(dt.getDate() - lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));
এটি ভাল কাজ করবে।
এই ফাংশনটি চলতি সপ্তাহকে বিয়োগ করতে বর্তমান মিলিসেকেন্ড সময়কে ব্যবহার করে এবং যদি বর্তমান তারিখ সোমবারে থাকে (তবে রোববার থেকে জাভাস্ক্রিপ্ট গণনা করা হয়) তবে আরও এক সপ্তাহ বিয়োগ করে।
function getMonday(fromDate) {
// length of one day i milliseconds
var dayLength = 24 * 60 * 60 * 1000;
// Get the current date (without time)
var currentDate = new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate());
// Get the current date's millisecond for this week
var currentWeekDayMillisecond = ((currentDate.getDay()) * dayLength);
// subtract the current date with the current date's millisecond for this week
var monday = new Date(currentDate.getTime() - currentWeekDayMillisecond + dayLength);
if (monday > currentDate) {
// It is sunday, so we need to go back further
monday = new Date(monday.getTime() - (dayLength * 7));
}
return monday;
}
যখন সপ্তাহটি এক মাস থেকে অন্য মাসে (এবং আরও বছর) বিস্তৃত হয় তখন আমি এটি পরীক্ষা করে দেখেছি এবং এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে।
শুভ সন্ধ্যা,
আমি কেবল একটি সাধারণ এক্সটেনশন পদ্ধতি থাকা পছন্দ করি:
Date.prototype.startOfWeek = function (pStartOfWeek) {
var mDifference = this.getDay() - pStartOfWeek;
if (mDifference < 0) {
mDifference += 7;
}
return new Date(this.addDays(mDifference * -1));
}
আপনি লক্ষ্য করবেন এটি আসলে আমি ব্যবহার করি এমন একটি এক্সটেনশন পদ্ধতি ব্যবহার করে:
Date.prototype.addDays = function (pDays) {
var mDate = new Date(this.valueOf());
mDate.setDate(mDate.getDate() + pDays);
return mDate;
};
এখন, যদি আপনার সপ্তাহগুলি রবিবার থেকে শুরু হয়, পিস্টার্টঅফভিউক প্যারামিটারের জন্য "0" পাস করুন, এর মতো:
var mThisSunday = new Date().startOfWeek(0);
একইভাবে, যদি আপনার সপ্তাহগুলি সোমবার থেকে শুরু হয়, তবে pStartOfWeek পরামিতিটির জন্য "1" পাস করুন:
var mThisMonday = new Date().startOfWeek(1);
শুভেচ্ছা সহ,
আজ থেকে সপ্তাহের প্রথম দিনের তারিখ পেতে, আপনি এরকম কিছু ব্যবহার করতে পারেন:
function getUpcomingSunday() {
const date = new Date();
const today = date.getDate();
const dayOfTheWeek = date.getDay();
const newDate = date.setDate(today - dayOfTheWeek + 7);
return new Date(newDate);
}
console.log(getUpcomingSunday());
বা আজ থেকে সপ্তাহের শেষ দিন পেতে:
function getLastSunday() {
const date = new Date();
const today = date.getDate();
const dayOfTheWeek = date.getDay();
const newDate = date.setDate(today - (dayOfTheWeek || 7));
return new Date(newDate);
}
console.log(getLastSunday());
* আপনার টাইম জোনের উপর নির্ভর করে, সপ্তাহের শুরুটি রবিবার থেকে শুরু করতে হবে না, এটি শুক্রবার, শনিবার, সোমবার বা আপনার যন্ত্রে সেট করা অন্য কোনও দিন শুরু হতে পারে। এই পদ্ধতিগুলি তার জন্য অ্যাকাউন্ট হবে।
* আপনি এ জাতীয় toISOString
পদ্ধতি ব্যবহার করে এটি ফর্ম্যাট করতে পারেন:getLastSunday().toISOString()
সেটডেট () এর উপর মাসের সীমানা নিয়ে সমস্যা রয়েছে যা উপরের মন্তব্যে উল্লিখিত হয়েছে। একটি পরিষ্কার পরিচ্ছন্নতা হ'ল তারিখ অবজেক্টের (আশ্চর্যজনকভাবে বিপরীতমুখী) পদ্ধতিগুলির পরিবর্তে যুগের টাইমস্ট্যাম্পগুলি ব্যবহার করে তারিখের পার্থক্য খুঁজে পাওয়া। অর্থাত
function getPreviousMonday(fromDate) {
var dayMillisecs = 24 * 60 * 60 * 1000;
// Get Date object truncated to date.
var d = new Date(new Date(fromDate || Date()).toISOString().slice(0, 10));
// If today is Sunday (day 0) subtract an extra 7 days.
var dayDiff = d.getDay() === 0 ? 7 : 0;
// Get date diff in millisecs to avoid setDate() bugs with month boundaries.
var mondayMillisecs = d.getTime() - (d.getDay() + dayDiff) * dayMillisecs;
// Return date as YYYY-MM-DD string.
return new Date(mondayMillisecs).toISOString().slice(0, 10);
}
এখানে আমার সমাধান:
function getWeekDates(){
var day_milliseconds = 24*60*60*1000;
var dates = [];
var current_date = new Date();
var monday = new Date(current_date.getTime()-(current_date.getDay()-1)*day_milliseconds);
var sunday = new Date(monday.getTime()+6*day_milliseconds);
dates.push(monday);
for(var i = 1; i < 6; i++){
dates.push(new Date(monday.getTime()+i*day_milliseconds));
}
dates.push(sunday);
return dates;
}
এখন আপনি ফিরে অ্যারে সূচক দ্বারা তারিখ চয়ন করতে পারেন।
গাণিতিকভাবে গণনার একটি উদাহরণ, কোনও Date
ফাংশন ছাড়াই ।
const date = new Date();
const ts = +date;
const mondayTS = ts - ts % (60 * 60 * 24 * (7-4) * 1000);
const monday = new Date(mondayTS);
console.log(monday.toISOString(), 'Day:', monday.getDay());
const formatTS = v => new Date(v).toISOString();
const adjust = (v, d = 1) => v - v % (d * 1000);
const d = new Date('2020-04-22T21:48:17.468Z');
const ts = +d; // 1587592097468
const test = v => console.log(formatTS(adjust(ts, v)));
test(); // 2020-04-22T21:48:17.000Z
test(60); // 2020-04-22T21:48:00.000Z
test(60 * 60); // 2020-04-22T21:00:00.000Z
test(60 * 60 * 24); // 2020-04-22T00:00:00.000Z
test(60 * 60 * 24 * (7-4)); // 2020-04-20T00:00:00.000Z, monday
// So, what does `(7-4)` mean?
// 7 - days number in the week
// 4 - shifting for the weekday number of the first second of the 1970 year, the first time stamp second.
// new Date(0) ---> 1970-01-01T00:00:00.000Z
// new Date(0).getDay() ---> 4
এর আরও সাধারণ সংস্করণ ... এটি আপনার নির্দিষ্ট দিনটির ভিত্তিতে চলতি সপ্তাহের যে কোনও দিন আপনাকে দেবে।
//returns the relative day in the week 0 = Sunday, 1 = Monday ... 6 = Saturday
function getRelativeDayInWeek(d,dy) {
d = new Date(d);
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:dy); // adjust when day is sunday
return new Date(d.setDate(diff));
}
var monday = getRelativeDayInWeek(new Date(),1);
var friday = getRelativeDayInWeek(new Date(),5);
console.log(monday);
console.log(friday);
চেক আউট: moment.js
উদাহরণ:
moment().day(-7); // last Sunday (0 - 7)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)
বোনাস: node.js এর সাথেও কাজ করে
moment().startOf('week')
moment().startOf("week")
লোকেল সেটিংসের উপর নির্ভর করে পূর্ববর্তী রবিবারের তারিখটি দিতে পারে। সেক্ষেত্রেmoment().startOf('isoWeek')
পরিবর্তে ব্যবহার করুন: runkit.com/e એમ્બેડ
startOf()
: momentjs.com/docs/#/manipulating/start-of