সোমবার আইসো উইকডে () দিয়ে সপ্তাহ শুরু হচ্ছে


117

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

// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),

    // We begin on the start of the first week.
    // Mon Tues Wed Thur Fri Sat Sun
    // 20  21   22  23   24  25  26
    begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting

console.log(begin.isoWeekday()); // 1 - all good

// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');

console.log(begin.isoWeekday()); // 7 - what happened ???

// Get column headers
for (var i=0; i<7; i++) {
    console.log(begin.format('ddd')); // I want Monday first!
    begin.add('d', 1);
}

jsFiddle

সম্পাদনা সম্পাদনা আমি isoWeekdayআসলে কী করছে তা ভুল বুঝেছিলাম । আমি ভেবেছিলাম এটি "সপ্তাহের কোন দিনটি সপ্তাহের প্রথম দিন" পরিবর্তনশীল (যা বিদ্যমান নেই) সেট করে। এটি আসলে যা করে তা হ'ল সপ্তাহের দিনটিকে ঠিক moment.weekday()বদলে দেওয়া, তবে 0-6 এর পরিবর্তে 1-7 রেঞ্জ ব্যবহার করে।

উত্তর:


247

begin.startOf('isoWeek');পরিবর্তে ব্যবহার করার চেষ্টা করুনbegin.startOf('week');


10
startOf('week')বর্তমান লোকেলের উপর নির্ভর করে যেখানে রবিবার স্পষ্টতই আপনার ক্ষেত্রে সপ্তাহের শুরু চিহ্নিত করে। startOf('iweek')সোমবার, যা সপ্তাহের আইএসও শুরু করবে। তবে আপনি ঠিক বলেছেন, আমি অফিসিয়াল সাইটে কোনও ডকুমেন্টেশন
পাইনি

15
Moment.js এর বর্তমান সংস্করণ ব্যবহার করছে isoweek
সেভিঞ্জার

2
@ সেভিংারের মন্তব্য এবং বর্তমান নথি অনুসারে সম্পাদিত :)
ম্যাচু

20
isoWeek, সর্বশেষ সংস্করণে মূলধন ডাব্লু সহ
মিশিগেল

8
এখানে
দলিলযুক্ত

13

startOfআগে কল isoWeekday

var begin = moment(date).startOf('week').isoWeekday(1);

ওয়ার্কিং ডেমো


1
এটি সঠিকভাবে কাজ করে না। আজকের তারিখের জন্য, 2016-09-05 এটি সপ্তাহের শুরু তারিখ হিসাবে 2016-08-29 ফেরত দেয় যা সত্য নয়, কারণ আজ সোমবার (আইসো সপ্তাহ) week সঠিক উত্তর ইতিমধ্যে গৃহীত হয়েছে।
undefinedman

9

এভাবে আপনি সপ্তাহের প্রথম দিনটি সেট করতে পারেন।

moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');

moment().weekday(1);মুহুর্তের পরিবর্তে এটি ব্যবহার করার বিষয়টি নিশ্চিত করুন isসইও উইকডে (1)


2

ভেবেছিলাম ভবিষ্যতের যে কোনও উঁকিঝুঁকির জন্য আমি এটি যুক্ত করব। এটি সর্বদা এটি নিশ্চিত করবে যে এর সোমবার প্রয়োজনে, সর্বদা রবিবার নিশ্চিত করতেও ব্যবহার করা যেতে পারে। আমার জন্য আমার সর্বদা সোমবার দরকার, তবে স্থানীয় ব্যবহৃত মেশিনটির উপর নির্ভরশীল এবং এটি একটি সহজ সমাধান:

var begin = moment().isoWeekday(1).startOf('week');
var begin2 = moment().startOf('week');
// could check to see if day 1 = Sunday  then add 1 day
// my mac on bst still treats day 1 as sunday    

var firstDay = moment().startOf('week').format('dddd') === 'Sunday' ?     
moment().startOf('week').add('d',1).format('dddd DD-MM-YYYY') : 
moment().startOf('week').format('dddd DD-MM-YYYY');

document.body.innerHTML = '<b>could be monday or sunday depending on client: </b><br />' + 
begin.format('dddd DD-MM-YYYY') + 
'<br /><br /> <b>should be monday:</b> <br>' + firstDay + 
'<br><br> <b>could also be sunday or monday </b><br> ' + 
begin2.format('dddd DD-MM-YYYY');

1
সম্ভাব্য শর্টকাট মুহূর্ত ()। isoWeekday (1) .startOf ('isoweek')। ফর্ম্যাট ('
dddd

2

এখানে প্রদত্ত সপ্তাহের দিনগুলির জন্য আরও জেনেরিক সমাধান। জেসফিডেলে কাজ করা ডেমো

var myIsoWeekDay = 2; // say our weeks start on tuesday, for monday you would type 1, etc.

var startOfPeriod = moment("2013-06-23T00:00:00"),

// how many days do we have to substract?
var daysToSubtract = moment(startOfPeriod).isoWeekday() >= myIsoWeekDay ?
    moment(startOfPeriod).isoWeekday() - myIsoWeekDay :
    7 + moment(startOfPeriod).isoWeekday() - myIsoWeekDay;

// subtract days from start of period
var begin = moment(startOfPeriod).subtract('d', daysToSubtract);

-1

যারা isoWeekডিফল্ট হতে চান তাদের জন্য আপনি এই মুহুর্তের আচরণটি যেমন পরিবর্তন করতে পারেন:

const moment = require('moment');
const proto = Object.getPrototypeOf(moment());

const {startOf, endOf} = proto;
proto.startOf = function(period) {
  if (period === 'week') {
    period = 'isoWeek';
  }
  return startOf.call(this, period);
};
proto.endOf = function(period) {
  if (period === 'week') {
    period = 'isoWeek';
  }
  return endOf.call(this, period);
};

এখন আপনি কেবল ব্যবহার করতে পারেন someDate.startOf('week')কিনা ব্যবহার করতে আমার মনে হয় আপনি রবিবার পাবেন উদ্বেজক বা করেও isoweekবা isoWeekইত্যাদি

এছাড়াও আপনি এটিকে কোনও চলক হিসাবে সংরক্ষণ করতে পারেন const period = 'week'এবং এটি নিরাপদে subtract()বা add()অপারেশনগুলিতে ব্যবহার করতে পারেন , যেমন moment().subtract(1, period).startOf(period);। এই সময়ের হচ্ছে সাথে কাজ করবে না isoWeek

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.