मैं एक कैलेंडर बना रहा हूं जहां लोग दृश्य कैलेंडर से कई दिनों का चयन कर सकते हैं।

किसी तिथि पर क्लिक करने से वह "से" या "से" तिथि के रूप में चुनी जाएगी। उदाहरण के लिए, यदि मैं 1januari और 5 January पर क्लिक करता हूं। 1 जनवरी "से" तिथि होगी जबकि 5 जनवरी "से" तिथि होगी। आसान है ना?

अब बात यह है कि यदि कोई उपयोगकर्ता नई तिथि पर क्लिक करता है, तो मुझे वर्तमान "से" और "से" तिथियों को अपडेट करना होगा। का उपयोग करते हुए

stringToDate(date.dateTime) > stringToDate(this.state.fromDate)

मुझे पता चलता है कि आने वाली तारीख बाद में है, तो वर्तमान "तारीख से" मैं वर्तमान "से" तारीख को आने वाली तारीख में बदलने के लिए उपयोग कर सकता हूं क्योंकि 7 जनवरी 5 जनवरी के बाद "जरूरी" के साथ आता है जिसका अर्थ है कि उपयोगकर्ता उन्हें अपडेट करना चाहता था "तारीख तक।

एक समान कार्य "से" तिथि के लिए समान कार्य करता है। यह बहुत अच्छा काम करता है और सभी लेकिन इसका मतलब यह है कि उपयोगकर्ता "से" तिथि का चयन नहीं कर सकते हैं जो उनकी मूल "से" तिथि के बाद आती है।

मैं जो हासिल करना चाहता हूं वह निम्नलिखित है: गणना करें कि आने वाली तिथि "से" तिथि या "से" तिथि के करीब है या नहीं। इसलिए यदि कोई उपयोगकर्ता 1 और 5 जनवरी से शुरू करता है और 2 जनवरी को क्लिक करता है तो मैं मान सकता हूं कि वह अपनी "प्रेषक" तिथि को अपडेट करना चाहता है।

मेरा वर्तमान कार्य इस तरह दिखता है:

handleFromDateSelected(date) {
    let updatedFromDate = '';
    let updatedToDate = '';

    if (this.state.fromDate) {
        if (stringToDate(date.dateTime) > stringToDate(this.state.fromDate)) {
            updatedFromDate = this.state.fromDate;
            updatedToDate = date.dateTime;
        } else {
            updatedFromDate = date.dateTime;
            updatedToDate = this.state.fromDate;
        }
    } else {
        updatedFromDate = date.dateTime;
    }

    this.setState({
        fromDate: updatedFromDate,
        toDate: updatedToDate,
    });
}
0
Vera Perrone 9 अक्टूबर 2018, 13:26

2 जवाब

सबसे बढ़िया उत्तर

यदि आप वास्तव में यह जांचना चाहते हैं कि नई तारीख किस तारीख से बंद है, जो कि मेरी राय में एक अच्छा विकल्प नहीं है, तो आप सभी 3 तिथियों (से, से और नई) को टाइमस्टैम्प में बदल सकते हैं और पूर्ण अंतर की तुलना कर सकते हैं। सबसे कम का मतलब है कि यह नए के करीब है।

उदाहरण के लिए, मान लें कि dateFrom, dateTo और newDate दिनांक ऑब्जेक्ट हैं:

//Returns true if newDate is closer to dateFrom
function isFromDateCloser(dateFrom, dateTo, newDate)
{
    timeStampFrom = dateFrom.getTime();
    timeStampTo = dateTo.getTime();
    timeStampNew = newDate.getTime();

    return (Math.abs(timeStampFrom - timeStampNew) < Math.abs(timeStampTo - timeStampNew));
}

if (isFromDateCloser(dateFrom, dateTo, newDate))
    dateFrom = newDate;
else
    dateTo = newDate;

उस उदाहरण में, मैंने मनमाने ढंग से चुना है कि यदि नई तिथि दोनों तिथियों के बीच सख्ती से है, तो नई तिथि तिथि होगी। यदि आप चाहते हैं कि से नई तिथि बन जाए, तो वापसी में < को <= से बदलें

2
Cid 9 अक्टूबर 2018, 14:16

आपके मामले में

 var firstDate = new Date(date.dateTime);
 var secondDate = new Date(this.state.fromDate)
          if (firstDate.getTime() > secondDate .getTime()){
  // do something here 
  }
0
Touqeer Aslam 9 अक्टूबर 2018, 13:46