2013-09-30 7 views
26

मैं एक समस्या पिछले सोमवार एक विशेष तिथि को देखते हुए हो रही का एक सा लगता है। मैं काम के लिए क्षण जेएस का उपयोग करने की कोशिश कर रहा हूँ। जाहिर है, मैं इसे हाथ से करते हैं, लेकिन पाया यह उत्सुक है कि मैं इसे अपनी वेबसाइट पर moment.js दस्तावेज में उदाहरण का उपयोग काम करने के लिए नहीं मिल सका कर सकते हैं: http://momentjs.com/docs/#/get-set/day/पल अगले निर्दिष्ट सप्ताह दिए गए दिनांक रही js दिन

मैं की तरह कुछ कोशिश कर रहा था:

moment([2013, 08, 15, 15, 20]).day(-1).format('ddd, MMM DD') 

जो 'दो दिन पहले' तारीख में जो परिणाम, कि 13 सितंबर के बजाय उम्मीद 9 वीं सितंबर जा रहा है।

किसी को भी यहाँ एक सुराग है? धन्यवाद।

उत्तर

54

यहाँ है कि यह कैसे काम करता है:

moment().day(1) // this monday 
moment().day(-6) // last monday, think of it as this monday - 7 days = 1 - 7 = -6 

ही दूसरी दिशा में लागू होता है:

moment().day(8) // next monday, or this monday + 7 days = 1 + 7 = 8 

आपका कोड moment().day(-1) इस रविवार के रूप में समझाया जा सकता है - 1 दिन = 0 - 1 = -1 या इस शनिवार - 7 दिन = 6 - 7 = -1

+0

नवीनतम पल आप दिन ही उदाहरण के पल() के नाम का उपयोग कर सकते हैं के रूप में है। दिन ("सोमवार") –

11

स्वीकार किए जाते हैं जवाब केवल यदि आप पहले से ही पता है कि क्या सवाल में दिन इस सप्ताह या अगले सप्ताह में है काम करता है। अगर आपको पता नहीं है तो क्या होगा? कुछ मनमानी तारीख के बाद आपको बस अगले गुरुवार को उपलब्ध होना चाहिए?

सबसे पहले, आप जानना चाहते हैं कि प्रश्न में दिन छोटे या दिन आप चाहते हैं की तुलना में बड़ा है चाहता हूँ। यदि यह बड़ा है, तो आप अगले सप्ताह उपयोग करना चाहते हैं। यदि यह छोटा है, तो आप उसी सप्ताह के सोमवार या गुरुवार का उपयोग कर सकते हैं।

const dayINeed = 4; // for Thursday 
if (moment().isoWeekday() <= dayINeed) { 
    return moment().isoWeekday(dayINeed); 
} else... 

हम दिन हम पहले से ही चाहते हैं अतीत कर रहे हैं (अगर उदाहरण के लिए, हमारे पल एक शुक्रवार है, और हम अगले उपलब्ध गुरुवार चाहते हैं), तो आप एक समाधान है कि आप दे देंगे चाहते हैं "गुरुवार हमारे पल के बाद सप्ताह ", चाहे कोई भी क्षण हमारे पल के बिना, किसी भी अनिवार्य जोड़/घटाने के बिना। संक्षेप में, आप moment().add(1, 'weeks') का उपयोग करके पहले सप्ताह में जाना चाहते हैं। एक बार जब आप अगले सप्ताह में हों, तो आप moment().day(1) का उपयोग करके उस सप्ताह के किसी भी दिन का चयन कर सकते हैं।

const dayINeed = 4; // for Thursday 

// if we haven't yet passed the day of the week that I need: 
if (moment().isoWeekday() <= dayINeed) { 
    // then just give me this week's instance of that day 
    return moment().isoWeekday(dayINeed); 
} else { 
    // otherwise, give me next week's instance of that day 
    return moment().add(1, 'weeks').isoWeekday(dayINeed); 
} 

भी देखें:

साथ में, यह आप अगले उपलब्ध दिन है कि अपनी आवश्यकताओं को पूरा करती है, जहां अपने प्रारंभिक पल अपने सप्ताह में बैठता है की परवाह किए बिना दे देंगे https://stackoverflow.com/a/27305748/800457

1

मुझे लगता है कि बात यह है कि day() या isoWeekday() का उपयोग करके आपको वर्तमान सप्ताह में एक तिथि मिलती है, इससे कोई फर्क नहीं पड़ता कि सप्ताह का कौन सा दिन आज है। नतीजतन, आपको जो तारीख मिलती है वह पिछली हो सकती है, या अभी भी आ सकती है।

उदाहरण:

अगर आज बुधवार है, moment().isoWeekday(5).format() आगामी शुक्रवार की तारीख लौट आते हैं।

moment().isoWeekday(1).format() पिछले सोमवार वापसी होगी है।

तो जब आप कहते हैं कि आप दिनांक चाहते हैं, तो मान लें, "पिछले मंगलवार", यह तिथि वर्तमान सप्ताह या पिछले सप्ताह से संबंधित हो सकती है, इस पर निर्भर करता है कि आज कौन सा दिन है।

पिछले dayOfTheWeek की तारीख पाने के लिए एक संभावित समारोह

function getDateOfPreviousDay(dayOfTheWeek) { 
    currentDayOfTheWeek = moment().isoWeekday(); 
    if (currentDayOfTheWeek >= dayOfTheWeek) { 
    return moment().isoWeekday(dayOfTheWeek).format(); // a date in the current week 
    } 
    else { 
    return moment().add(-1,'weeks').isoWeekday(dayOfTheWeek).format(); // a date in the previous week 
    } 
} 
संबंधित मुद्दे