2017-08-07 20 views
6

में सप्ताहांत प्रारंभ और समाप्ति दिनांक कैसे प्राप्त करें इससे पहले कि मैं इस npm से कोणीय-डेटपिकर का उपयोग कर रहा हूं।angularjs

यहाँ, मैं जो सप्ताह StartDate और EndDate का मतलब है अब तारीख picker.But से तारीख मैं जैसे क्षेत्रों के लिए है FromDate और todate चयन करने में सक्षम हूँ दिखाना चाहिए जब किसी भी तारीख में लेने उस सप्ताह।

पूर्व: कैलेंडर की तरह 01-08-2017 मंगल पर शुरू करें, इसलिए जब भी 01 से 05 तक कोई भी तिथि चुनती है तो दोनों फ़ील्ड को 01 के रूप में सेडेटाइट के रूप में दिखाया जाना चाहिए और 06 के रूप में TODate और जब भी उपयोगकर्ता चुनता है 31-07-2017 दो क्षेत्रों को जुलाई के 30 और 31 के रूप में दिखाना चाहिए।

मेरे पास एक सुझाव नीचे वर्णित कोड

Convert.ToDouble(objstart.DayOfWeek)).ToString("dd-MM-yyyy") 

लेकिन यह कैसे AngularJS में इस USECASE प्राप्त करने के लिए की तरह के रूप में डॉटनैट में onchange घटना को नियंत्रित FromDate कैलेंडर से todate प्राप्त करने के लिए किया है।

धन्यवाद

+0

यदि आपको जावास्क्रिप्ट में बहुत अधिक तारीख मैनिपुलेशन करना है, तो मैं [moment.js] (https://momentjs.com/) – devqon

+0

का उपयोग करने की अनुशंसा करता हूं आपके उदाहरणों से निर्णय लेना: आप चुने गए दिनांक को चुनना चाहते हैं फिट बैठता है। लेकिन सप्ताह की शुरुआत और अंत उसी महीने में होना चाहिए, हमेशा, और सप्ताह रविवार को शुरू होते हैं। क्या वह सही है? – Salketer

+0

@ साल्केटर हां। लेकिन शुरुआत के रूप में अनिवार्य रविवार को डिफ़ॉल्ट रूप से भी नहीं, हम भी कोई मुद्दा नहीं रखा। –

उत्तर

2

ठीक है, तो मुझे क्या करना चाहते हैं क्या अलग तिथियों की गणना, और प्रारंभ या सप्ताह के अंत के आधार पर न्यूनतम/अधिकतम लेने के लिए है ।

यहाँ:

//Use the date received, UTC to prevent timezone making dates shift 
 
var pickedDate = new Date("08-03-2017UTC"); 
 
    
 
var startSunday = new Date(pickedDate); 
 
startSunday.setDate(pickedDate.getDate() - pickedDate.getDay()); 
 
var startMonth = new Date(pickedDate); 
 
startMonth.setDate(1); 
 
var startDate = Math.max(startMonth,startSunday); 
 

 
console.log("Start:" , new Date(startDate)); 
 

 
var endSaturday = new Date(pickedDate); 
 
endSaturday.setDate(pickedDate.getDate() + (7-pickedDate.getDay())); 
 
var endMonth = new Date(pickedDate); 
 
endMonth.setMonth(pickedDate.getMonth()+1);//Add a month 
 
endMonth.setDate(0);// to select last day of previous month. 
 
var endDate = Math.min(endMonth,endSaturday); 
 

 
console.log("End" , new Date(endDate));

चाल, तारीखों के साथ खेलने के लिए सभी संभव आरंभ और समाप्ति तिथि को खोजने के लिए तो Math.min और Math.max के साथ सही एक का चयन किया गया जो उनके टाइमस्टैम्प का उपयोग कर तिथियों की तुलना करेगा।

+0

त्वरित उत्तर के लिए धन्यवाद। मुझे यह कोशिश करने दो। –

0

बहुत अच्छा पुस्तकालय दिनांक जोड़तोड़ को संभालने के लिए जावास्क्रिप्ट में उपलब्ध नहीं है।

https://github.com/datejs/Datejs

एक विधि

Date.parse('next friday')  // Returns the date of the next Friday. 
Date.parse('last monday') 

इन पद्धति का उपयोग करना आप शुरू प्राप्त कर सकते हैं और वर्तमान सप्ताह के आधार पर सप्ताह की समाप्ति तिथि नहीं है।

मुझे आशा है कि इससे मदद मिलेगी।

+0

यह कुछ हद तक स्वीकार्य है, लेकिन महीने के सप्ताह के अंत में इस समारोह से अंत में लिखा गया है कि यह अगले महीने की तारीख को अंतिम तिथि के रूप में दिखाएगा जो शुक्रवार को है। उस स्थिति में इसे सूर्य और समाप्ति तिथि के रूप में प्रारंभ तिथि को –

+0

के रूप में प्रारंभ तिथि दिखाना चाहिए, यदि संभव हो तो कृपया बेवकूफ में दिखाने का प्रयास करें ताकि मैं आसानी से आपके परिदृश्य को उत्तर के लिए धन्यवाद दे सकूं। –

+0

हाय चरन, हो सकता है कि मैं स्पष्ट रूप से प्रश्न को समझने में सक्षम न हो। आपको वास्तव में क्या चाहिए हो सकता है कि आप कुछ इनपुट लिख सकें और उम्मीद कर सकें ताकि मैं समझ सकूं। – Ashvin777

-1

मुझे लगता है कि इसके लिए कोई निर्देश या फ़िल्टर नहीं है, आपको अपने लिए एक बनाना होगा। आप दिनांक वस्तु को date-time-object

0

से संदर्भित कर सकते हैं आप लाइब्रेरी moment लाइब्रेरी का उपयोग करके इसे प्राप्त कर सकते हैं। इस पुस्तकालय में बहुत सारे उपयोगी कार्य हैं।

var selectedDate = moment('Mon Aug 10 2017'); 

//If you want to get the ISO week format(Monday to Sunday) 
var weekStart = selectedDate.clone().startOf('isoweek').format('MMM Do'); 
var weekEnd = selectedDate.clone().endOf('isoweek').format('MMM Do'); 

//If you want to get the Sunday to Saturday week format 
var weekStart = selectedDate.clone().startOf('week').format('MMM Do'); 
var weekEnd = selectedDate.clone().endOf('week').format('MMM Do'); 
+0

यह ठीक है लेकिन मेरा मामला सप्ताह के प्रारूप के बारे में नहीं है। जब उपयोगकर्ता डेटपिकर में किसी भी दिनांक का चयन करता है तो उसे उस सप्ताह की शुरुआत और अंतराल –

+0

सप्ताह दिखाना चाहिए स्टार्ट का मूल्य "7 अगस्त" और सप्ताह के अंत में "13 अगस्त" होगा। आशा है कि यह वही है जो आप चाहते हैं, है ना? –

0

यहां कोई कोणीय निर्देश की आवश्यकता नहीं है, तो आप नीचे दिए गए जावास्क्रिप्ट एक्सटेंशन का उपयोग कर सकते हैं।

//get week from date 
Date.prototype.getWeekNumber = function (weekstart) { 


    var target = new Date(this.valueOf()); 

    // Set default for weekstart and clamp to useful range   
    if (weekstart === undefined) weekstart = 1; 
    weekstart %= 7; 

    // Replaced offset of (6) with (7 - weekstart) 
    var dayNr = (this.getDay() + 7 - weekstart) % 7; 
    target.setDate(target.getDate() - dayNr + 0);//0 means friday 

    var firstDay = target.valueOf(); 

    target.setMonth(0, 1); 
    if (target.getDay() !== 4) { 
     target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7); 
    } 
    return 1 + Math.ceil((firstDay - target)/604800000);; 
}; 

//get date rance of week 
Date.prototype.getDateRangeOfWeek = function (weekNo, weekstart) { 

    var d1 = this; 
    var firstDayOfWeek = eval(d1.getDay() - weekstart); 
    d1.setDate(d1.getDate() - firstDayOfWeek); 

    var weekNoToday = d1.getWeekNumber(weekstart); 
    var weeksInTheFuture = eval(weekNo - weekNoToday); 

    var date1 = angular.copy(d1); 
    date1.setDate(date1.getDate() + eval(7 * weeksInTheFuture)); 
    if (d1.getFullYear() === date1.getFullYear()) { 
     d1.setDate(d1.getDate() + eval(7 * weeksInTheFuture)); 
    } 

    var rangeIsFrom = eval(d1.getMonth() + 1) + "/" + d1.getDate() + "/" + d1.getFullYear(); 

    d1.setDate(d1.getDate() + 6); 
    var rangeIsTo = eval(d1.getMonth() + 1) + "/" + d1.getDate() + "/" + d1.getFullYear(); 

    return { startDate: rangeIsFrom, endDate: rangeIsTo } 
}; 

आपका कोड की तरह लग जा सकती है, इस

var startdate = '01-08-2017' 
       var weekList = []; 
       var year = startdate.getFullYear(); 
       var onejan = new Date(year, 0, 1);//first january is the first week of the year 
       var weekstart = onejan.getDay(); 
       weekNumber = startdate.getWeekNumber(weekstart); 

       //generate week number 
        var wkNumber = weekNumber; 
        var weekDateRange = onejan.getDateRangeOfWeek(wkNumber, weekstart); 
        var wk = { 
         value: wkNumber 
         , text: 'Week' + wkNumber.toString() 
         , weekStartDate: new Date(weekDateRange.startDate) 
         , weekEndDate: new Date(weekDateRange.endDate) 
        }; 
        weekList.push(wk);