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

जे एस पुस्तकालय

/moment.js
/moment-timezone-with-data-10-year-range.js

मेरा नमूना कोड

 function isOpen(openTime, closeTime, timezone){
  var  status = "closed";
  if(openTime != "24HR"){
    const  now = moment().tz(timezone);
    const  storeOpenTime = moment.tz(openTime, "h:mmA", timezone);
    const  storeCloseTime = moment.tz(closeTime, "h:mmA", timezone);
    /* const  storeOpenTime = moment.tz(Date.now(Date(openTime)), "h:mmA", timezone);
    const  storeCloseTime = moment.tz(Date.now(Date(closeTime)), "h:mmA", timezone);*/
    const  check = now.isBetween(storeOpenTime, storeCloseTime);
    if(check || check == true){
      status = "open";
    }
  }else{
    status = "open";
  }
  return status;
}

मान लें कि मलेशिया कुआलालंपुर में वर्तमान समय 11:34 अपराह्न है, और मैं नीचे कोड चलाता हूं

 isOpen("8:00AM", "12:20AM", "Asia/Kuala_Lumpur") 
 returned output = closed

उपरोक्त कोड के लिए अपेक्षित आउटपुट open है, लेकिन यदि मलेशिया कुआलालंपुर में वर्तमान समय 11:34 अपराह्न है, तो नीचे दिए गए कोड को चलाएं।

isOpen("8:00AM", "10:20PM", "Asia/Kuala_Lumpur")
returned output = closed

उपरोक्त आउटपुट सही है।

कृपया मेरा प्रश्न यह है कि मैं momentjs का उपयोग यह जांचने के लिए कैसे करूं कि देश के समय क्षेत्र का उपयोग करके खुले और बंद के बीच का समय बीत चुका है या नहीं?

1
Peter 26 पद 2019, 19:08

1 उत्तर

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

यहां आपका कोड सही किया गया है और टिप्पणी की गई है:

function isOpen(openTime, closeTime, timezone) {

  // handle special case
  if (openTime === "24HR") {
    return "open";
  }

  // get the current date and time in the given time zone
  const now = moment.tz(timezone);

  // Get the exact open and close times on that date in the given time zone
  // See https://github.com/moment/moment-timezone/issues/119
  const date = now.format("YYYY-MM-DD");
  const storeOpenTime = moment.tz(date + ' ' + openTime, "YYYY-MM-DD h:mmA", timezone);
  const storeCloseTime = moment.tz(date + ' ' + closeTime, "YYYY-MM-DD h:mmA", timezone);

  let check;
  if (storeCloseTime.isBefore(storeOpenTime)) {
    // Handle ranges that span over midnight
    check = now.isAfter(storeOpenTime) || now.isBefore(storeCloseTime);
  } else {
    // Normal range check using an inclusive start time and exclusive end time
    check = now.isBetween(storeOpenTime, storeCloseTime, null, '[)');
  }

  return check ? "open" : "closed";
}

// Testing
const zone = "Asia/Kuala_Lumpur";
console.log("now", moment.tz(zone).format("h:mmA"));
console.log("24HR", isOpen("24HR", undefined, zone));
console.log("2:00AM-8:00AM", isOpen("2:00AM", "8:00AM", zone));
console.log("8:00AM-2:00PM", isOpen("8:00AM", "2:00PM", zone));
console.log("2:00PM-8:00PM", isOpen("2:00PM", "8:00PM", zone));
console.log("8:00PM-2:00AM", isOpen("8:00PM", "2:00AM", zone));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.27/moment-timezone-with-data-10-year-range.min.js"></script>

आपके पास मुख्य समस्या यह थी कि आपको issue #119< में वर्णित बग के आसपास काम करना होगा। /a>, जो यह है कि किसी विशिष्ट समय क्षेत्र में केवल-समय को पार्स करते समय, क्षण tz-विशिष्ट स्थानीय तिथि के बजाय UTC दिनांक को गलत तरीके से लागू करता है।

दूसरे, आपको खुले/करीब क्षणों के अनुक्रम से बाहर होने की जाँच करके, मध्यरात्रि में फैले समय सीमा के मामले को भी संभालने की आवश्यकता है। जब वे होते हैं, तो तुलना को अलग तरीके से करने की आवश्यकता होती है - यह जाँच कर कि वर्तमान समय खुलने के बाद है या बंद होने से पहले।

1
Matt Johnson-Pint 27 पद 2019, 17:38