জাভাস্ক্রিপ্ট - বর্তমান তারিখ থেকে সপ্তাহের প্রথম দিন পান


161

সপ্তাহের প্রথম দিনটি পেতে আমার দ্রুততম উপায় প্রয়োজন। উদাহরণস্বরূপ: আজ 11 নভেম্বর, এবং একটি বৃহস্পতিবার; এবং আমি এই সপ্তাহের প্রথম দিনটি চাই, এটি নভেম্বরের ৮ ই ও সোমবার চাই। আমার কাছে মংগোডিবি মানচিত্রের জন্য দ্রুততম পদ্ধতি দরকার, কোনও ধারণা?


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

আমি একই সমস্যা পেয়েছি এবং জাভাস্ক্রিপ্টের তারিখের অবজেক্টে আমি প্রচুর বাগ পেয়েছি এখন ডেটজেএস.কম (এখানে কোড. google.com/p/datejs ), একটি লাইব্রেরি যা দেশীয় তারিখের মিস আচরণকে সংশোধন করে।
lolol

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

উত্তর:


322

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

3
এই ফাংশনটিতে কি বাগ আছে? - যদি প্রশ্নে তারিখ বৃহস্পতিবার হয় 2nd, দিন = 4, পরিবর্তন = 2 - 4 + 1 টি = -1, এবং setDate ফল (দেখুন 'পূর্ববর্তী মাসের শেষ দিন আগের দিন' হতে হবে এই )।
ইজহাকি

2
@ ইজাকি আপনার মানে কী? মে 2 এর জন্য ফাংশন 29 এপ্রিল ফেরত, যা সঠিক।
মেজে

14
রবিবার যদি সপ্তাহের প্রথম দিন হয়,diff = d.getDate() - day;
সিফ্রি

2
@ এসএমএস কোডটির জন্য ধন্যবাদ। আমি সপ্তাহের প্রথম দিনের ঠিক 0 ঘন্টা পাওয়ার জন্য কিছুটা টুইস্ট করেছিলাম। d.setHours(0); d.setMinutes(0); d.setSeconds(0);
আওই

3
যাইহোক, d.setDate পরিবর্তনযোগ্য, এটি নিজেই "d" পরিবর্তন করে
আয়শা

53

এটি কীভাবে পারফরম্যান্সের সাথে তুলনা করে তা নিশ্চিত নয় তবে এটি কাজ করে।

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

4
এই উত্তরটি হওয়া উচিত ছিল, এটি কেবলমাত্র প্রশ্নের উত্তর জিজ্ঞাসা করেছে answers অন্যগুলি বগি বা তৃতীয় পক্ষের লাইব্রেরিতে আপনাকে উল্লেখ করে।
ওভারমার্স

কুল এটা আমার জন্য কাজ করে! কিছু সামঞ্জস্য করার মাধ্যমে আমি একটি নির্ধারিত তারিখ থেকে সপ্তাহের সোমবার এবং শুক্রবার দুটি পেতেই শীতল!
alexventuraio

10
এটি দুর্দান্ত তবে এই ফাংশনটিকে "সেটটোমন্ডে" বলা উচিত কারণ এটি পাসের তারিখ অবজেক্টটিকে সংশোধন করে get এই ফাংশন date = new Date(date);GetMonday ফাংশনে প্রথম লাইন হিসাবে স্থাপন করা সহজতম সমাধান ।
শেন

এটা সত্যিই দারুন. একটি getSunday পদ্ধতি আরও সহজ! একটি গুচ্ছ ধন্যবাদ!
জিসুসআইএসএমডিআইভার.ডিল

4
এই উত্তরটি ভুল কারণ দিনক্ষণের সঞ্চয়ের কারণে সমস্ত দিন 24 ঘন্টা থাকে না। এটি হয় আপনার তারিখের সময়টি অপ্রত্যাশিতভাবে পরিবর্তন করতে পারে বা নির্দিষ্ট সময়ে ভুল দিনটিও ফিরে আসতে পারে।
লুই আমেরাইল

13

পরীক্ষা করে দেখুন Date.js

Date.today().previous().monday()

1
অথবা হতে পারেDate.parse('last monday');
অনুরাগ

আমার এটি মঙ্গোডিবি ডাটাবেসের জন্য প্রয়োজন। সুতরাং আমি তারিখ.জেএসকে উল্লেখ করতে পারি না, তবে আপনার কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ।
Ins

1
আহ, আমি সচেতন ছিলাম না যে আপনি সরাসরি মোঙ্গোডিবিতে জেএস কার্যকর করতে পারেন। বেশ সুন্দর lick ধরে নিয়েছে যে আপনি কোয়েরি ডেটা প্রস্তুত করতে জেএস ব্যবহার করছেন।
ম্যাট

JQuery এর মতো, একটি সাধারণ ফাংশনে অ্যাক্সেস পাওয়ার জন্য একটি সম্পূর্ণ লাইব্রেরি (যতই ছোটই হোক না কেন) টেনে আনতে আগ্রহী না।
মাফিন ম্যান

একটি ভাল সমাধান নয়, কারণ দেশগুলি রয়েছে, তাদের সপ্তাহের প্রথম দিনটি রবিবার।
স্টিফান ব্রেন্ডল

11

সিএমএসের উত্তরটি সঠিক তবে ধরে নিয়েছেন যে সোমবার সপ্তাহের প্রথম দিন।
চ্যান্ডলার জাওয়োলের উত্তর সঠিক তবে ডেট প্রোটোটাইপের সাথে ফিডস।
অন্যান্য উত্তরগুলি যা ঘন্টা / মিনিট / সেকেন্ড / মিলিসেকেন্ডের সাথে খেলতে পারে তা ভুল।

নীচের ফাংশনটি সঠিক এবং এটি প্রথম প্যারামিটার হিসাবে এবং সপ্তাহের কাঙ্ক্ষিত প্রথম দিনটিকে দ্বিতীয় প্যারামিটার হিসাবে গ্রহণ করে (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)


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

এটি ভাল কাজ করবে।


4

আমি এটি ব্যবহার করছি

function get_next_week_start() {
   var now = new Date();
   var next_week_start = new Date(now.getFullYear(), now.getMonth(), now.getDate()+(8 - now.getDay()));
   return next_week_start;
}

3

এই ফাংশনটি চলতি সপ্তাহকে বিয়োগ করতে বর্তমান মিলিসেকেন্ড সময়কে ব্যবহার করে এবং যদি বর্তমান তারিখ সোমবারে থাকে (তবে রোববার থেকে জাভাস্ক্রিপ্ট গণনা করা হয়) তবে আরও এক সপ্তাহ বিয়োগ করে।

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

যখন সপ্তাহটি এক মাস থেকে অন্য মাসে (এবং আরও বছর) বিস্তৃত হয় তখন আমি এটি পরীক্ষা করে দেখেছি এবং এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে।


3

শুভ সন্ধ্যা,

আমি কেবল একটি সাধারণ এক্সটেনশন পদ্ধতি থাকা পছন্দ করি:

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

শুভেচ্ছা সহ,


2

সপ্তাহের প্রথম দিন

আজ থেকে সপ্তাহের প্রথম দিনের তারিখ পেতে, আপনি এরকম কিছু ব্যবহার করতে পারেন:

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


1

সেটডেট () এর উপর মাসের সীমানা নিয়ে সমস্যা রয়েছে যা উপরের মন্তব্যে উল্লিখিত হয়েছে। একটি পরিষ্কার পরিচ্ছন্নতা হ'ল তারিখ অবজেক্টের (আশ্চর্যজনকভাবে বিপরীতমুখী) পদ্ধতিগুলির পরিবর্তে যুগের টাইমস্ট্যাম্পগুলি ব্যবহার করে তারিখের পার্থক্য খুঁজে পাওয়া। অর্থাত

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

1

এখানে আমার সমাধান:

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

এখন আপনি ফিরে অ্যারে সূচক দ্বারা তারিখ চয়ন করতে পারেন।


0

গাণিতিকভাবে গণনার একটি উদাহরণ, কোনও 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


0

এর আরও সাধারণ সংস্করণ ... এটি আপনার নির্দিষ্ট দিনটির ভিত্তিতে চলতি সপ্তাহের যে কোনও দিন আপনাকে দেবে।

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


-1

চেক আউট: 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 এর সাথেও কাজ করে


18
এটি যদিও ওপির প্রশ্নের উত্তর নয়। তার একটি তারিখ রয়েছে, 08/07/14 (d / m / y) বলুন। তিনি এই সপ্তাহের প্রথম দিনটি পেতে চান (আমার স্থানীয় moment().startOf('week')
অবস্থানের

দ্রষ্টব্য যে moment().startOf("week")লোকেল সেটিংসের উপর নির্ভর করে পূর্ববর্তী রবিবারের তারিখটি দিতে পারে। সেক্ষেত্রেmoment().startOf('isoWeek') পরিবর্তে ব্যবহার করুন: runkit.com/e એમ્બેડ
Harm te

পিএস ডক্স চালু আছে startOf(): momentjs.com/docs/#/manipulating/start-of
Harm te
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.