मोमेंट जेएस - जांचें कि क्या कोई तारीख आज या भविष्य में है


222

मैं momentjsयह जांचने के लिए उपयोग करने की कोशिश कर रहा हूं कि क्या दी गई तारीख आज या भविष्य में है।

अभी तक मेरे पास इतना ही है:

<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">

var SpecialToDate = '31/01/2014'; // DD/MM/YYYY

var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
    alert('date is today or in future');
} else {
    alert('date is in the past');
}

</script>

कोड अतीत में एक तारीख के रूप में मेरी तारीख (31 जनवरी 2014) का मूल्यांकन कर रहा है।

कोई आइडिया है कि मैं क्या गलत कर रहा हूँ?

जवाबों:


197

प्रलेखन पढ़ने के बाद: http://momentjs.com/docs/#/displaying/difference/ , आपको diffमाइनस ऑपरेटर की तरह फ़ंक्शन पर विचार करना होगा ।

                   // today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0

इसलिए, आपको अपनी स्थिति को उल्टा करना होगा।

यदि आप जांचना चाहते हैं कि सब ठीक है, तो आप फ़ंक्शन में एक अतिरिक्त पैरामीटर जोड़ सकते हैं:

moment().diff(SpecialTo, 'days') // -8 (days)

75
अगर यह एक अलग दिन है, लेकिन यह काम नहीं करेगा, लेकिन अंतर 24 घंटे से भी कम है
galki

1
कार्य करना, भले ही समय अंतर 24 घंटे से कम हो।
झंवर

3
मेरे लिए काम नहीं कर रहा है। यदि भविष्य के क्षण में दिन +1 है। (विशेष।, 'दिन') मुझे -0 (नकारात्मक शून्य) देता है
gavroche

2
आज का मतलब अगले 24 घंटों में नहीं है। isSame अच्छा समाधान है।
कास्पर ज़ीमियानेक

1
moment().diff(SpecialToDate)सीधे मिलीसेकंड में अंतर देगा। 'days'आवश्यकता नहीं है। यह सभी परिदृश्यों के लिए काम करेगा। SpecialToDate '2018-10-26 00:00:00'एक उदाहरण के लिए हो सकता है ।
बैकस्लैश

312

आप isSameफ़ंक्शन का उपयोग कर सकते हैं :

var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate) {

}

क्या यह मैच साल और महीने में भी है?
SuperUberDuper

13
यह वर्ष और महीने से मेल खाना चाहिए। पल ('2010-01-01')। isSame ('2011-01-01', 'महीना'); // गलत, अलग साल का पल ('2010-01-01')। isSame ('2010-02-01', 'दिन'); // गलत, अलग महीना
ग्रे वुल्फ

6
यह ओपी के सवाल का जवाब नहीं देता है ... "आज या भविष्य में", और क्या है startTime? दिनांक ऑब्जेक्ट के पास कोई isSameविधि नहीं है ...
Sharcoux

1
@ शार्कोक्स यह सवाल क्षणिकाओं के बारे में है, इसलिए स्पष्ट रूप से यह एक पल की वस्तु है।
नाथन

157
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');

85

चूंकि किसी ने अभी तक इसका उल्लेख नहीं किया है, इसलिए यह जांचने का सबसे सरल तरीका है कि क्या कोई मोमेंट डेट ऑब्जेक्ट अतीत में है:

momentObj.isBefore()

या भविष्य में:

momentObj.isAfter()

बस आर्गन्स को खाली छोड़ दें - जो अब डिफ़ॉल्ट होगा।

वहाँ भी है isSameOrAfterऔर isSameOrBefore

समय में एनबी इस कारकों। यदि आप केवल दिन की परवाह करते हैं, तो दीपेन्दु का उत्तर देखें ।


1
डॉक्स समझाते हैं कि यह अपरिभाषित व्यवहार है, इसलिए आपको ऐसा नहीं करना चाहिए: momentjs.com/docs/#/query/is-before
Dancrumb

13
@ डनक्रंब इसे फिर से पढ़ें। "अगर कुछ भी पल के लिए पारित नहीं किया जाता है # समय से पहले, यह वर्तमान समय के लिए डिफ़ॉल्ट होगा।" momentObjमेरे उदाहरण में एक पल की तारीख का एक उदाहरण है। डॉक्स विशेष रूप से एक नया उदाहरण (वर्तमान समय) बनाने और फिर यह जांचने की बात कर रहे हैं कि यह अतीत में है, एक बयान में। मैं आपको यह सुझाव नहीं दे रहा हूं कि आप moment().isBefore()बिल्कुल व्यर्थ हैं - यदि आप अब अतीत (या भविष्य) में हैं तो आप क्यों जाँचेंगे ?
मप्र

83

आप उपयोग कर सकते हैं isAfter() गति क्वेरी फ़ंक्शन का :

जांचें कि क्या एक पल दूसरे पल के बाद है।

moment('2010-10-20').isAfter('2010-10-19'); // true

यदि आप मिलीसेकेंड के अलावा किसी इकाई के लिए ग्रैन्युलैरिटी को सीमित करना चाहते हैं, तो दूसरे पैरामीटर के रूप में इकाइयों को पास करें।

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false

moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

http://momentjs.com/docs/#/query/is-after/


जो कंस्ट्रक्टर डेट स्ट्रिंग लेता है, उसे पदावनत कर दिया जाता है।
वाहिद अमीरी

@VahidAmiri डॉक्स ने इसका उल्लेख नहीं किया है। हालाँकि हम सुझाव देते हैं कि यदि हम ISO 8601 का उपयोग नहीं करते हैं तो हम स्ट्रिंग + फॉर्मेट कंस्ट्रक्टर का उपयोग करते हैं । इसलिए जब तक कोई कुछ अजीब तारीख प्रारूपों का उपयोग नहीं कर रहा है, यह सिर्फ एक स्ट्रिंग का उपयोग करने के लिए ठीक है।
जॉन्डोडो

15

पलटना इस विधि की जाँच करने के लिए है कि क्या आज या भविष्य में इस तरह से है:

!moment(yourDate).isBefore(moment(), "day");

10

यदि किसी और को इसकी आवश्यकता है, तो बस यह करें:

const isToday = moment(0, "HH").diff(date, "days") == 0;

या यदि आप एक समारोह चाहते हैं:

isToday = date => moment(0,"HH").diff(date, "days") == 0;

जहां तारीख तारीख आप के लिए जाँच करना चाहते है।

व्याख्या

moment(0, "HH") आज का दिन आधी रात को लौटाता है।

date1.diff(date2, "days") तारीख 1 और तारीख 2 के बीच दिनों की संख्या लौटाता है।

अपडेट करें

मैंने तब से isSame फ़ंक्शन पाया है , जो मेरा मानना ​​है कि यदि आज कोई तिथि है, तो उसका पता लगाने के लिए उपयोग करना सही कार्य है:

moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01

8

यह जाँचने के लिए कि क्या यह आज है :

यदि हम दो तारीखों की तुलना करते हैं, जिसमें समय की जानकारी isSameभी स्पष्ट रूप से विफल हो जाएगी। diffउस स्थिति में विफल हो जाएगा जब दो तिथियां नए दिन से अधिक होती हैं:

var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds

मुझे सबसे अच्छा तरीका लगता है, भले ही यह त्वरित और छोटा न हो, निम्नलिखित है:

var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()

यह जाँचने के लिए कि क्या यह भविष्य में है :

जैसा कि अन्य उपयोगकर्ताओं द्वारा भी सुझाया गया है, diffविधि काम करती है।

var isFuture = now.diff(anotherDate) < 0 

7

यदि आपको केवल यह जानना है कि कौन सा बड़ा है, तो आप उनकी सीधे तुलना भी कर सकते हैं:

var SpecialToDate = '31/01/2014'; // DD/MM/YYYY

var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment() > SpecialTo) {
    alert('date is today or in future');
} else {
    alert('date is in the past');
}

उम्मीद है की यह मदद करेगा!


4

अगर फर्स्टडेट समान है या बाद में (भविष्य में) दूसरा डेट रिटर्न सही है या अन्य गलत है। टोडा फर्स्टडेट = नई तिथि ();

  static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isSameOrBefore(date2,'day');
    }
    return false;
  }

वहाँ है isSame, isBefore और isAfter दिन की तुलना करें पल उदाहरण;

  static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if (date1 && date2) {
      return date1.isSame(date2,'day');
    }
    return false;
  }

  static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isAfter(date2,'day');
    }
    return false;
  }

  static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isBefore(date2,'day');
    }
    return false;
  }

3

भविष्य की तारीख के लिए सबसे सरल एक का उपयोग करें

if(moment().diff(yourDate) >=  0)
     alert ("Past or current date");
else
     alert("It is a future date");

2
function isTodayOrFuture(date){
  date = stripTime(date);
  return date.diff(stripTime(moment.now())) >= 0;
}

function stripTime(date){
  date = moment(date);
  date.hours(0);
  date.minutes(0);
  date.seconds(0);
  date.milliseconds(0);
  return date;
}

और फिर बस इसे इस लाइन का उपयोग करें:

isTodayOrFuture(YOUR_TEST_DATE_HERE)

1

पिछले दिनों की जाँच करने के लिए कल का चयन करें या नहीं moment().subtract(1, "day");

संदर्भ: - http://momentjs.com/docs/#/manipulating/subtract/

function myFunction() {
  var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
  var SpecialToDate = document.getElementById("theDate").value;

  if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
    alert("date is today or in future");
    console.log("date is today or in future");
  } else {
    alert("date is in the past");
    console.log("date is in the past");
  }
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">


1

यदि हम बिना समय के अंतर चाहते हैं, तो आप पल के प्रारूप का उपयोग करके नीचे दी गई तारीख की तरह अलग (केवल समय के बिना तारीख) प्राप्त कर सकते हैं।

जैसा कि, मैं फर्क करते हुए मुद्दे का सामना कर रहा था;

moment().diff([YOUR DATE])

तो, निम्नलिखित के साथ आया;

const dateValidate = moment(moment().format('YYYY-MM-DD')).diff(moment([YOUR SELECTED DATE HERE]).format('YYYY-MM-DD'))

IF dateValidate > 0 
   //it's past day
else
   //it's current or future

अगर कुछ सुधार करना है तो कृपया बेझिझक टिप्पणी करें।

धन्यवाद,


3
कृपया समीक्षा करें कि एक अच्छा उत्तर कैसे लिखें । कोड-केवल उत्तर हतोत्साहित किए जाते हैं क्योंकि वे यह नहीं समझाते हैं कि वे मुद्दे को कैसे हल करते हैं। आपको यह बताने के लिए अपने उत्तर को अपडेट करना चाहिए कि यह क्या करता है और यह पहले से ही इस प्रश्न के कई उत्तरों पर कैसे सुधार करता है
1

0

मैं इसे कुछ और के लिए चाहता था, लेकिन अंततः एक चाल मिली जिसे आप कोशिश कर सकते हैं

somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'

var d = moment();
 var today = moment();
 
 console.log("Usign today's date, is Date is Today? ",d.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
 var someRondomDate = moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
  
 var anotherRandomDate =  moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, {
    sameDay: '[Today]'})=='Today');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>


0

निम्नलिखित के साथ जांचें:

let isContinue = moment().diff('2020-04-04T20:06:11+05:30')/1000

यह सेकंड में लौट रहा है ..

अगर 2 मिनट स्थिति के रूप में जाँच करेगा

if (isContinue < 120) {
  ..To check otp details or further logic
} else {
   // otp is getting invalid
}

0

सबसे सरल उत्तर होगा:

const firstDate = moment('2020/10/14'); // the date to be checked
const secondDate = moment('2020/10/15'); // the date to be checked

firstDate.startOf('day').diff(secondDate.startOf('day'), 'days'); // result = -1
secondDate.startOf('day').diff(firstDate.startOf('day'), 'days'); // result = 1

यह आधी रात के मूल्य के साथ जांच करेगा और एक सटीक परिणाम लौटाएगा। यह तब भी काम करेगा जब दो तिथियों के बीच का समय 24 घंटे से कम हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.