পিএইচপি-র মতো জাভাস্ক্রিপ্টে বছরের সপ্তাহ পান


140

পিএইচপি-র মতো আমি কীভাবে বছরের বর্তমান সপ্তাহের সংখ্যা পাব date('W')?

এটি সোমবার থেকে শুরু হওয়া সপ্তাহের বছরের ISO-8601 সপ্তাহের সংখ্যা হওয়া উচিত।


1
<a href=" javascript.about.com/library/blweekyear.htm "> <b> এখানে </ b> </a> দেখুন, যা আমি 'জাভাস্ক্রিপ্ট সপ্তাহের বছরের' গুগল করার সময় দেওয়া প্রথম লিঙ্ক ছিল।
পিট উইলসন

+1 লোল! সেখান থেকে আমি নিজের কাছ থেকে স্নিপেট পেয়েছি, তবে উত্সটি কিছুক্ষণ আগে পেয়েছিলাম বলে মনে করতে পারছি না।
টম চ্যান্টলার

@ পিট: এই কোডটি বর্তমান সপ্তাহ হিসাবে 22 পেয়েছে। এটি 21 হওয়া উচিত
PeeHaa

@ পিট:: ডি নোপেজ একটি সাধারণ -1 কৌশলটি করবে না: পি যে আইএসও -8601 সাপ্তাহিক সংখ্যাটি পাবে না। আইএসও -8601 এ এক সপ্তাহ সোমবার শুরু হয়। প্রথম সপ্তাহটি বছরের প্রথম বৃহস্পতিবারের সাথে সপ্তাহ হয়। en.wikedia.org/wiki/ISO-8601 । পিএস আমি নই যে আপনাকে উজ্জীবিত করেছিল।
PeeHaa

উত্তর:


276

আপনি এখানে যা চান তা পেতে সক্ষম হবেন: http://www.merlyn.demon.co.uk/js-date6.htm#YWD

একই সাইটে আরও ভাল লিঙ্কটি: সপ্তাহের সাথে কাজ করা

সম্পাদন করা

এখানে প্রদত্ত লিঙ্কগুলির উপর ভিত্তি করে কিছু কোড এবং ডমারের দ্বারা পোস্ট করা কানের দুল। এটি http://www.merlyn.demon.co.uk/js-date6.htm#YWD- এ ফলাফলের বিরুদ্ধে হালকাভাবে পরীক্ষা করা হয়েছে । ভাল পরীক্ষা করুন, কোন গ্যারান্টি সরবরাহ করা হয়।

2017 সম্পাদনা করুন

দিবালোক সংরক্ষণের সময় এবং 1 জানুয়ারী শুক্রবার ছিল সেই বছরগুলিতে তারিখগুলির সাথে একটি সমস্যা ছিল। সমস্ত ইউটিসি পদ্ধতি ব্যবহার করে স্থির করা হয়েছে। নিম্নলিখিত মোমেন্ট.জেএসগুলিতে অভিন্ন ফলাফল প্রদান করে।

/* For a given date, get the ISO week number
 *
 * Based on information at:
 *
 *    http://www.merlyn.demon.co.uk/weekcalc.htm#WNR
 *
 * Algorithm is to find nearest thursday, it's year
 * is the year of the week number. Then get weeks
 * between that date and the first day of that year.
 *
 * Note that dates in one year can be weeks of previous
 * or next year, overlap is up to 3 days.
 *
 * e.g. 2014/12/29 is Monday in week  1 of 2015
 *      2012/1/1   is Sunday in week 52 of 2011
 */
function getWeekNumber(d) {
    // Copy date so don't modify original
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    // Get first day of year
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
    // Return array of year and week number
    return [d.getUTCFullYear(), weekNo];
}

var result = getWeekNumber(new Date());
document.write('It\'s currently week ' + result[1] + ' of ' + result[0]);

"ইউটিসি" তারিখটি তৈরি করার সময় শূন্য হয়।

ছোট করা, প্রোটোটাইপ সংস্করণ (কেবলমাত্র সপ্তাহের সংখ্যাটি দেয়):

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

document.write('The current ISO week number is ' + new Date().getWeekNumber());

পরীক্ষা বিভাগ

এই বিভাগে, আপনি YYYY-MM-DD ফর্ম্যাটে যে কোনও তারিখ সন্নিবেশ করতে পারেন এবং পরীক্ষা করুন যে এই কোডটি Moment.js আইএসও সপ্তাহের নম্বর হিসাবে একই সপ্তাহের নম্বর দেয় (2000 থেকে 2050 পর্যন্ত 50 বছরেরও বেশি সময় পরীক্ষিত)।

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

function checkWeek() {
  var s = document.getElementById('dString').value;
  var m = moment(s, 'YYYY-MM-DD');
  document.getElementById('momentWeek').value = m.format('W');
  document.getElementById('answerWeek').value = m.toDate().getWeekNumber();      
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Enter date  YYYY-MM-DD: <input id="dString" value="2021-02-22">
<button onclick="checkWeek(this)">Check week number</button><br>
Moment: <input id="momentWeek" readonly><br>
Answer: <input id="answerWeek" readonly>


8
এই কোডটি ২০১১ সালের ৩ য় সপ্তাহ হিসাবে জানুয়ারী 2 শে 2011 হিসাবে গণনা করে যেখানে এটি 52 তম হওয়া উচিত। এটি মূল কোডে সঠিকভাবে কাজ করে তবে আপনার অভিযোজনে নয়।
আলাসদায়ের

4
তুমি আমার গাধা বাঁচিয়েছ ধন্যবাদ। আপনি যদি ওপেন সোর্সটিতে অবদান রাখতে চান, আমি আপনাকে jQuery UI পদ্ধতির জন্য একটি প্যাচ তৈরি করার পরামর্শ দিচ্ছি: d .ডেটপিকার.আইসো 8601 উইক (তারিখ) যেহেতু এটি কেবল সপ্তাহে ফিরে আসে না, তবে কোনও বছর নয়।
খ্রিস্টান

18
আজ, জানুয়ারী 4, 2016, আমি লক্ষ্য করেছি যে এটিও যোগ করার জন্য প্রয়োজনীয় d.setMilliseconds(0)ছিল - আমি নতুন তারিখ () বা নতুন তারিখ ("1/4/2016") ব্যবহার করেছি কিনা তার উপর নির্ভর করে একই তারিখের জন্য এটি বিভিন্ন সপ্তাহের সংখ্যা প্রদর্শন করে চলেছে। অন্যেরা যারা একই অভিজ্ঞতা পেতে পারে কেবল তাদের জন্য একটি শিরোনাম।
জ্যাকব লরিজেন

2
প্রদত্ত কোডটি আইএসও 8601 অনুসরণ করে না, এটি একের পরে বন্ধ রয়েছে
এরিক গ্রেঞ্জ

2
ওফস আপনি ঠিক বলেছেন, আমার টাইপোটি '2015-12-30' হওয়ার কথা ছিল যা কাজ করে।
মিত্র


26

যেমন উপরে বলা হয়েছে তবে ক্লাস ছাড়াই:

let now = new Date();
let onejan = new Date(now.getFullYear(), 0, 1);
week = Math.ceil( (((now - onejan) / 86400000) + onejan.getDay() + 1) / 7 );

4
এক-Jan-টংকার! * নিনজা রোল *
কোডম্যানএক্স

2
এটিই একমাত্র উত্তর যা এমনকি বছরের প্রথম সপ্তাহের জন্যও সপ্তাহের সঠিক সংখ্যাটি নিয়ে আসে।
প্রসাদ ডব্লু

(now.getTime() - onejan.getTime())বিল্ড সমস্যা এড়ানোর জন্য করণীয় নোট ।
শুক্র

4
প্রশ্নটি আইএসও 8601 এর জন্য জিজ্ঞাসা করেছে যা এটি উপেক্ষা করে। প্রশ্নের উত্তর হিসাবে এটি কেবল ভুল
হ্যাভলক করুন

23

যথাযথভাবে http://javascript.about.com/library/blweekyear.htm

Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    var millisecsInDay = 86400000;
    return Math.ceil((((this - onejan) /millisecsInDay) + onejan.getDay()+1)/7);
};

1
সংক্ষিপ্ত, তবে রবিবারকে সপ্তাহের প্রথম দিন হিসাবে রবিবার বিবেচনা করে তাই ২ Sunday শে ডিসেম্বর ২০১৫ সপ্তাহের প্রথম দিনের চেয়ে সপ্তাহের প্রথম দিন ৫ 53। এটি কিছুটা উপযুক্তও হতে পারে।
রবজি

3
আমি মনে করি যেহেতু এটি প্রোটোটাইপটিতে যুক্ত করা হচ্ছে এটিই আপনার প্রত্যাশা যা তারিখ সানডে প্রথম দিন হিসাবে বিবেচনা করে।
এড সিকস

দিবালোক সংরক্ষণের সময়গুলি নিয়ে কী সমস্যা হবে না? আমি মনে করি গ্রীষ্মের সময় সকাল 1 টা পর্যন্ত এটি অগ্রসর হবে না।
হাফথোর

এছাড়াও, এই প্রযুক্তিগতভাবে 0: 00: 00.001 অবধি সপ্তাহে অগ্রসর হয় না? ম্যাথ.ফ্লুর ব্যবহার করা আরও ভাল?
হাফথোর

11

জ্যাকব রাইটের Date.format()লাইব্রেরি পিএইচপি এর date()ফাংশনের স্টাইলে তারিখ বিন্যাস প্রয়োগ করে এবং আইএসও -8601 সপ্তাহের সংখ্যাটিকে সমর্থন করে:

new Date().format('W');

এটি কেবলমাত্র এক সপ্তাহের সংখ্যার জন্য কিছুটা ওভারকিল হতে পারে তবে এটি পিএইচপি শৈলী বিন্যাসকে সমর্থন করে এবং আপনি যদি এগুলি অনেক কিছু করতে থাকেন তবে তা বেশ কার্যকর।


দ্রুত হ্যাক-একসাথে স্ক্রিপ্টগুলির জন্য ভাল সমাধান :)
স্টেইন শ্যাট

6
getWeekOfYear: function(date) {
        var target = new Date(date.valueOf()),
            dayNumber = (date.getUTCDay() + 6) % 7,
            firstThursday;

        target.setUTCDate(target.getUTCDate() - dayNumber + 3);
        firstThursday = target.valueOf();
        target.setUTCMonth(0, 1);

        if (target.getUTCDay() !== 4) {
            target.setUTCMonth(0, 1 + ((4 - target.getUTCDay()) + 7) % 7);
        }

        return Math.ceil((firstThursday - target) /  (7 * 24 * 3600 * 1000)) + 1;
    }

নিম্নলিখিত কোডটি টাইমজোন-ইন্ডিপেন্ডেন্ট (ইউটিসির তারিখগুলি ব্যবহৃত) এবং https://en.wikedia.org/wiki/ISO_8601 অনুসারে কাজ করে


4

ওরাকলের স্পেসিফিকেশনে বর্ণিত জাভা এসই এর সিম্পলডেট ফরম্যাট ক্লাসটি দরকারী পেয়েছি : http://goo.gl/7MbCh5 । গুগল অ্যাপস স্ক্রিপ্টে আমার ক্ষেত্রে এটি এর মতো কাজ করেছে:

function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), "GMT", "w"));
  Logger.log(weekNum);
}

উদাহরণস্বরূপ স্প্রেডশিট ম্যাক্রোতে আপনি ফাইলটির আসল সময় অঞ্চলটি পুনরুদ্ধার করতে পারেন:

function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "w"));
  Logger.log(weekNum);
}

4

এটি ডেট.প্রোটোটাইপে "getWeek" পদ্ধতি যুক্ত করে যা বছরের শুরু থেকে সপ্তাহের সংখ্যা দেয়। যুক্তিটি সপ্তাহের কোন দিনটিকে প্রথম বিবেচনা করতে হবে তা নির্ধারণ করে। কোনও যুক্তি পাস না হলে প্রথম দিনটি রবিবার ধরে নেওয়া হয়।

/**
 * Get week number in the year.
 * @param  {Integer} [weekStart=0]  First day of the week. 0-based. 0 for Sunday, 6 for Saturday.
 * @return {Integer}                0-based number of week.
 */
Date.prototype.getWeek = function(weekStart) {
    var januaryFirst = new Date(this.getFullYear(), 0, 1);
    if(weekStart !== undefined && (typeof weekStart !== 'number' || weekStart % 1 !== 0 || weekStart < 0 || weekStart > 6)) {
      throw new Error('Wrong argument. Must be an integer between 0 and 6.');
    }
    weekStart = weekStart || 0;
    return Math.floor((((this - januaryFirst) / 86400000) + januaryFirst.getDay() - weekStart) / 7);
};

1
২০১ 2016 সালের প্রথম ক্যালেন্ডার সপ্তাহটি জার্মানিতে জানুয়ারী 4 এ শুরু হয় , তবে আপনার ফাংশনটি 1 জানুয়ারি থেকে 0 থেকে আবার গণনা শুরু হয় starts এটি বছরের শেষে ভুল নম্বরগুলিও ফেরত দেয়, উদাহরণস্বরূপ ২০১ 2018-১১-৩১ (৫ rd তম সপ্তাহ) এর জন্য 52, যদিও এটি ইতিমধ্যে 2019 এর 1 ম ক্যালেন্ডার সপ্তাহ : new Date(Date.UTC(2018,11, 31)).getWeek(1)+1(সোমবার জার্মানিতে সপ্তাহের প্রথম দিন)।
কোডম্যানএক্স

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

তথ্যের জন্য ধন্যবাদ। আমি রবজির সমাধানটি ব্যবহার করে শেষ করেছি, যা ISO8601 সপ্তাহের তারিখগুলি সঠিকভাবে প্রয়োগ করে (ডিসেম্বরের শেষ দিন এবং জানুয়ারীর প্রথম দিনগুলি সপ্তাহের 52, 53 বা 1 হতে পারে: en.m.wikedia.org/wiki/ISO_week_date
CodeManX

4

প্রদত্ত যে কোনও তারিখের সাপ্তাহিক সংখ্যাটি পান

function week(year,month,day) {
    function serial(days) { return 86400000*days; }
    function dateserial(year,month,day) { return (new Date(year,month-1,day).valueOf()); }
    function weekday(date) { return (new Date(date)).getDay()+1; }
    function yearserial(date) { return (new Date(date)).getFullYear(); }
    var date = year instanceof Date ? year.valueOf() : typeof year === "string" ? new Date(year).valueOf() : dateserial(year,month,day), 
        date2 = dateserial(yearserial(date - serial(weekday(date-serial(1))) + serial(4)),1,3);
    return ~~((date - date2 + serial(weekday(date2) + 5))/ serial(7));
}

উদাহরণ

console.log(
    week(2016, 06, 11),//23
    week(2015, 9, 26),//39
    week(2016, 1, 1),//53
    week(2016, 1, 4),//1
    week(new Date(2016, 0, 4)),//1
    week("11 january 2016")//2
);

1
আমি এটি বিশ্বাস করতে পারি না, তবে এই ফাংশনটি কেবলমাত্র সর্বদা কাজ করে! দিবালোকের সঞ্চয় যখন শেষ হয় তখন গ্রহণযোগ্য উত্তরটি খেলত, অন্যরা নির্দিষ্ট বছরগুলিতে সপ্তাহের সংখ্যা হিসাবে '0' বলেছিল। - এবং কিছু ইউটিসি ফাংশনের উপর নির্ভর করে যা কখনও কখনও আগের দিন ফিরে আসে তাই সপ্তাহে '53' বা '54' নির্ধারণ করে। দুর্ভাগ্যক্রমে আমার একটি রবিবার শুরু হওয়ার দরকার এবং এই কোডটি বোঝা খুব কঠিন ...
মেলিসা জাকারিয়াডিস

@ মেলিসাজাচারিয়াডিস বলেছেন I need the week to begin on a Sunday; আমি মনে করি একমাত্র প্রয়োজনীয় পরিবর্তনটি হ'ল কার্যদিবসের দিন () এর .getDay()+1পরিবর্তন করা হবে.getDay()
রাফা

4

নীচের কোডটি সঠিক আইএসও 8601 সপ্তাহের সংখ্যা গণনা করে। এটি date("W")প্রতি সপ্তাহে 1/1/1970 এবং 1/1/2100 এর মধ্যে পিএইচপি'র সাথে মেলে।

/**
 * Get the ISO week date week number
 */
Date.prototype.getWeek = function () {
  // Create a copy of this date object
  var target = new Date(this.valueOf());

  // ISO week date weeks start on Monday, so correct the day number
  var dayNr = (this.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  target.setDate(target.getDate() - dayNr + 3);

  // Store the millisecond value of the target date
  var firstThursday = target.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  target.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (target.getDay() !== 4) {
    target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((firstThursday - target) / 604800000);
}

সূত্র: টাকো ভ্যান ডেন ব্রুক


আপনি যদি প্রোটোটাইপগুলি প্রসারিত না করে থাকেন তবে এখানে একটি ফাংশন রয়েছে:

function getWeek(date) {
  if (!(date instanceof Date)) date = new Date();

  // ISO week date weeks start on Monday, so correct the day number
  var nDay = (date.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  date.setDate(date.getDate() - nDay + 3);

  // Store the millisecond value of the target date
  var n1stThursday = date.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  date.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (date.getDay() !== 4) {
    date.setMonth(0, 1 + ((4 - date.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((n1stThursday - date) / 604800000);
}

নমুনা ব্যবহার:

getWeek(); // Returns 37 (or whatever the current week is)
getWeek(new Date('Jan 2, 2011')); // Returns 52
getWeek(new Date('Jan 1, 2016')); // Returns 53
getWeek(new Date('Jan 4, 2016')); // Returns 1

আমি এই ফাংশনটি পছন্দ করি, তবে আমার একটি প্রশ্ন আছে; আমি যদি এটিকে রবিবারে রেখে দিতে চাই তবে আমি কী করব? +6 ) % 7অংশটি কী করে তা আমার কোনও ধারণা নেই। একটি স্ক্রাব থেকে ধন্যবাদ!
NoobishPro

1
@ বেবিডেড আইএসও সপ্তাহটি সোমবার থেকে শুরু হয়, তবে জাভাস্ক্রিপ্ট getDay()রবিবার থেকে শুরু হয়, তাই আপনি যদি এটি রবিবার থেকে শুরু করতে চান তবে আপনি সংশোধনটি সরাতে পারবেন:var nDay = date.getDay();
thrdan

আমি সপ্তাহের নম্বর পাওয়ার জন্য 8 টিরও বেশি জেএস বাস্তবায়ন চেষ্টা করেছি। এটি একমাত্র ফাংশন যা কাজ করে, তবে কেবলমাত্র আমি সমস্ত গেটার এবং সেটারগুলিকে getUTC .. এবং setUTC এ পরিবর্তন করি তবে কেন জানি না। আমি এটি দিয়ে পরীক্ষা করছিলাম: 2017-07-17T00: 00: 00.000Z (সপ্তাহ 29) 2017-07-23T23: 59: 59.000Z (সপ্তাহ 29) 2021-01-04T00: 00: 00.000Z (সপ্তাহ 1)
সাইকো brm


2

কোড স্নিপেট যা আমার পক্ষে বেশ ভাল কাজ করে তা হ'ল:

var yearStart = +new Date(d.getFullYear(), 0, 1);
var today = +new Date(d.getFullYear(),d.getMonth(),d.getDate());
var dayOfYear = ((today - yearStart + 1) / 86400000);
return Math.ceil(dayOfYear / 7).toString();

দ্রষ্টব্য:
dআমার তারিখটি যার জন্য আমি বর্তমান সপ্তাহের নম্বর চাই। ধর্মান্তরিত সংখ্যার মধ্যে তারিখ (টাইপ করা বিষয় নিয়ে কাজ)।
+


1

জাভাস্ক্রিপ্টে সপ্তাহের সংখ্যা গণনা করার জন্য আমার বাস্তবায়ন এখানে। গ্রীষ্ম এবং শীতের সময় অফসেটগুলির জন্যও সংশোধন করা হয়েছে। আমি এই নিবন্ধটি থেকে সপ্তাহের সংজ্ঞাটি ব্যবহার করেছি: আইএসও 8601

সপ্তাহগুলি সোমবার থেকে রবিবার পর্যন্ত এবং 4 শে জানুয়ারি সর্বদা বছরের প্রথম সপ্তাহে থাকে।

// add get week prototype functions
// weeks always start from monday to sunday
// january 4th is always in the first week of the year
Date.prototype.getWeek = function () {
    year = this.getFullYear();
    var currentDotw = this.getWeekDay();
    if (this.getMonth() == 11 && this.getDate() - currentDotw > 28) {
        // if true, the week is part of next year 
        return this.getWeekForYear(year + 1);
    }
    if (this.getMonth() == 0 && this.getDate() + 6 - currentDotw < 4) {
        // if true, the week is part of previous year
        return this.getWeekForYear(year - 1);
    }
    return this.getWeekForYear(year);
}

// returns a zero based day, where monday = 0
// all weeks start with monday
Date.prototype.getWeekDay = function () {
    return  (this.getDay() + 6) % 7;
}

// corrected for summer/winter time
Date.prototype.getWeekForYear = function (year) {
    var currentDotw = this.getWeekDay();
    var fourjan = new Date(year, 0, 4);
    var firstDotw = fourjan.getWeekDay();
    var dayTotal = this.getDaysDifferenceCorrected(fourjan) // the difference in days between the two dates.
    // correct for the days of the week
    dayTotal += firstDotw; // the difference between the current date and the first monday of the first week, 
    dayTotal -= currentDotw; // the difference between the first monday and the current week's monday
    // day total should be a multiple of 7 now
    var weeknumber = dayTotal / 7 + 1; // add one since it gives a zero based week number.
    return weeknumber;
}

// corrected for timezones and offset
Date.prototype.getDaysDifferenceCorrected = function (other) {
    var millisecondsDifference = (this - other);
    // correct for offset difference. offsets are in minutes, the difference is in milliseconds
    millisecondsDifference += (other.getTimezoneOffset()- this.getTimezoneOffset()) * 60000;
    // return day total. 1 day is 86400000 milliseconds, floor the value to return only full days
    return Math.floor(millisecondsDifference / 86400000);
}

পরীক্ষার জন্য আমি কুনিতে নিম্নলিখিত জাভাস্ক্রিপ্ট পরীক্ষা ব্যবহার করেছি

var runweekcompare = function(result, expected) {
    equal(result, expected,'Week nr expected value: ' + expected + ' Actual value: ' + result);
}

test('first week number test', function () {
    expect(5);
    var temp = new Date(2016, 0, 4); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 4, 23, 50); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 10, 23, 50); // is the sunday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 11, 23, 50); // is the second week of the year
    runweekcompare(temp.getWeek(), 2);
    var temp = new Date(2016, 1, 29, 23, 50); // is the 9th week of the year
    runweekcompare(temp.getWeek(), 9);
});

test('first day is part of last years last week', function () {
    expect(2);
    var temp = new Date(2016, 0, 1, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 53);
    var temp = new Date(2011, 0, 2, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 52);
});

test('last  day is part of next years first week', function () {
    var temp = new Date(2013, 11, 30); // is part of the first week of 2014
    runweekcompare(temp.getWeek(), 1);
});

test('summer winter time change', function () {
    expect(2);
    var temp = new Date(2000, 2, 26); 
    runweekcompare(temp.getWeek(), 12);
    var temp = new Date(2000, 2, 27); 
    runweekcompare(temp.getWeek(), 13);
});

test('full 20 year test', function () {
    //expect(20 * 12 * 28 * 2);
    for (i = 2000; i < 2020; i++) {
        for (month = 0; month < 12; month++) {
            for (day = 1; day < 29 ; day++) {
                var temp = new Date(i, month, day);
                var expectedweek = temp.getWeek();
                var temp2 = new Date(i, month, day, 23, 50);
                var resultweek = temp.getWeek();
                equal(expectedweek, Math.round(expectedweek), 'week number whole number expected ' + Math.round(expectedweek) + ' resulted week nr ' + expectedweek);
                equal(resultweek, expectedweek, 'Week nr expected value: ' + expectedweek + ' Actual value: ' + resultweek + ' for year ' + i + ' month ' + month + ' day ' + day);
            }
        }
    }
});

0

এই সপ্তাহে নম্বর জিনিসটি ** এর আসল ব্যথা হয়ে উঠেছে। নেট এর আশেপাশের বেশিরভাগ স্ক্রিপ্ট আমার পক্ষে কাজ করে না। তারা বেশিরভাগ সময় পরিশ্রম করে তবে তাদের সমস্ত কিছুটা ভেঙে যায়, বিশেষত যখন বছরটি পরিবর্তিত হয় এবং বছরের শেষ সপ্তাহ হঠাৎ করে পরের বছরের প্রথম সপ্তাহ ইত্যাদি হয়। এমনকি অ্যাঙ্গুলারের তারিখের ফিল্টারটি ভুল ডেটা দেখায় (এটি পরের বছরের প্রথম সপ্তাহে ছিল, কৌণিকটি দিয়েছে) সপ্তাহ 53)।

দ্রষ্টব্য: উদাহরণগুলি ইউরোপীয় সপ্তাহের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে (সোমবার প্রথম)!

getWeek ()

Date.prototype.getWeek = function(){

    // current week's Thursday
    var curWeek = new Date(this.getTime());
        curWeek.setDay(4);

    // Get year's first week's Thursday
    var firstWeek = new Date(curWeek.getFullYear(), 0, 4);
        firstWeek.setDay(4);

    return (curWeek.getDayIndex() - firstWeek.getDayIndex()) / 7 + 1;
};

setDay ()

/**
* Make a setDay() prototype for Date
* Sets week day for the date
*/
Date.prototype.setDay = function(day){

    // Get day and make Sunday to 7
    var weekDay = this.getDay() || 7;
    var distance = day - weekDay;
    this.setDate(this.getDate() + distance);

    return this;
}

getDayIndex ()

/*
* Returns index of given date (from Jan 1st)
*/

Date.prototype.getDayIndex = function(){
    var start = new Date(this.getFullYear(), 0, 0);
    var diff = this - start;
    var oneDay = 86400000;

    return Math.floor(diff / oneDay);
};

আমি এটি পরীক্ষা করেছি এবং এটি খুব ভালভাবে কাজ করছে বলে মনে হচ্ছে তবে আপনি যদি এতে কোনও ত্রুটি লক্ষ্য করেন তবে দয়া করে আমাকে জানান।


0

উইকনিবারের আইএসও-কনফর্মটি পেতে সংক্ষিপ্ততম কোডটি পেতে আমি অনেক চেষ্টা করেছি।

Date.prototype.getWeek=function(){
    var date=new Date(this);
    date.setHours(0,0,0,0);
    return Math.round(((date.setDate(this.getDate()+2-(this.getDay()||7))-date.setMonth(0,4))/8.64e7+3+(date.getDay()||7))/7)+"/"+date.getFullYear();}

dateআসলটি পরিবর্তন করতে এড়ানোর জন্য চলকটি প্রয়োজনীয় this। কোডের দৈর্ঘ্য বাঁচাতে আমি ফেরতের মানগুলি ব্যবহার করে setDate()এবং setMonth()বিতরণ getTime()করতে ব্যবহার করেছি এবং আমি একক উপাদানগুলির গুণক বা পাঁচটি শূন্যের সংখ্যার পরিবর্তে এক দিনের মিলি সেকেন্ডের জন্য একটি এক্সফোনাল সংখ্যা ব্যবহার করেছি। thisতারিখ বা মিলিসেকেন্ডের সংখ্যা, ফেরতের মান Stringযেমন "49/2017"।



0

আর একটি গ্রন্থাগার-ভিত্তিক বিকল্প: ব্যবহার করুন d3-time-format:

const formatter = d3.timeFormat('%U');
const weekNum = formatter(new Date());

0

কৌণিক 2 + তারিখ পাইপের জন্য সংক্ষিপ্ততম কর্মসংস্থান, আইএসও -8601 এর জন্য সামঞ্জস্য করা:

import {DatePipe} from "@angular/common";

public rightWeekNum: number = 0;
  
constructor(private datePipe: DatePipe) { }
    
calcWeekOfTheYear(dateInput: Date) {
  let falseWeekNum = parseInt(this.datePipe.transform(dateInput, 'ww'));
  this.rightWeekNum = falseWeekNum ? falseWeekNum : falseWeekNum-1;
}

-1
now = new Date();
today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
firstOfYear = new Date(now.getFullYear(), 0, 1);
numOfWeek = Math.ceil((((today - firstOfYear) / 86400000)-1)/7);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.