Moment JS - bir tarihin bugün veya gelecekte olup olmadığını kontrol edin


222

momentjsBelirli bir tarihin bugün veya gelecekte olup olmadığını kontrol etmek için kullanmaya çalışıyorum .

Şimdiye kadar sahip olduğum şey bu:

<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>

Kod, tarihimi (31 Ocak 2014) geçmiş bir tarih olarak değerlendiriyor.

Ne yaptığımı biliyor musun?

Yanıtlar:


197

Dokümanları okuduktan sonra: http://momentjs.com/docs/#/displaying/difference/ , difffonksiyonu bir eksi operatörü gibi düşünmelisiniz .

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

Bu nedenle, durumunuzu tersine çevirmelisiniz.

Her şeyin yolunda olup olmadığını kontrol etmek istiyorsanız, işleve fazladan bir parametre ekleyebilirsiniz:

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

75
bu farklı bir
günse

1
Zaman farkı 24 saatten az olursa olsun çalışır.
zanderwar

3
Benim için çalışmıyor. Gelecek andaki gün +1 ise (diff.) (SpecialTo, 'days') bana -0 (negatif sıfır) verir
gavroche

2
Bugün önümüzdeki 24 saat içinde demek değildir. isSame iyi bir çözümdür.
Kasper Ziemianek

1
moment().diff(SpecialToDate)milisaniye cinsinden farkı verecektir. 'days'Gerek yok. Bu, tüm senaryolar için geçerli olacaktır. SpecialToDate '2018-10-26 00:00:00'bir örnek olabilir.
backslashN

312

isSameİşlevi kullanabilirsiniz :

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

}

bu yıl ve ay da uyuyor mu?
SuperUberDuper

13
Yıl ve ay ile eşleşmelidir. moment ('2010-01-01'). isSame ('2011-01-01', 'ay'); // yanlış, farklı yıl anı ('2010-01-01'). isSame ('2010-02-01', 'gün'); // yanlış, farklı ay
Grey Wolf

6
Bu OP'nin sorusuna bile cevap vermiyor ... "bugün VEYA GELECEKTE" ve nedir startTime? Tarih nesnesinin bir isSameyöntemi yok ...
Sharcoux

1
@Sharcoux Bu soru momentjs hakkında, bu yüzden açıkça bir moment nesnesidir.
Nathan

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

85

Henüz kimse bundan bahsetmediği için, bir Moment date nesnesinin geçmişte olup olmadığını kontrol etmenin en basit yolu:

momentObj.isBefore()

Veya gelecekte:

momentObj.isAfter()

Sadece argümanları boş bırakın - bu şimdiye kadar varsayılan olacaktır.

Ayrıca isSameOrAfterve var isSameOrBefore.

Bu zamanla faktörler. Sadece günü önemsiyorsanız, Dipendu'nun cevabına bakınız .


1
Dokümanlar bunun tanımsız bir davranış olduğunu açıklıyor, bu yüzden bunu yapmamalısınız: momentjs.com/docs/#/query/is-before
Dancrumb

13
@Dancrumb Tekrar okuyun. "# İsBefore anına hiçbir şey iletilmezse, varsayılan olarak geçerli saate ayarlanır." momentObjBenim örnekte bir an tarihi bir örneğidir. Dokümanlar özellikle yeni bir örnek oluşturma (şimdiki zaman) ve daha sonra bunun geçmişte olup olmadığını tek bir ifadede kontrol etme hakkında konuşuyor. Ben değilim değil yapmanız düşündüren moment().isBefore()tamamen anlamsız olan - eğer neden kontrol ediyorum şimdi geçmişe (ya da gelecekte) yer alır?
mpen

83

isAfter()Momentjs sorgu işlevini kullanabilirsiniz :

Bir anın başka bir andan sonra olup olmadığını kontrol edin.

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

Ayrıntı düzeyini milisaniye dışında bir birimle sınırlamak istiyorsanız, birimleri ikinci parametre olarak iletin.

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/


Bir tarih dizesi alan yapıcı kullanımdan kaldırılmıştır.
Vahid Amiri

@VahidAmiri Dokümanlar bundan bahsetmiyor. Ancak ISO 8601 kullanmazsak string + format yapıcısını kullanmanızı öneririz . Bu yüzden bazı garip tarih formatları kullanmıyorsa, sadece bir dize kullanmakta sorun yoktur.
johndodo

15

Bir tarihin bugünle veya gelecekte böyle olup olmadığını kontrol etmek için anın yönteminden önce:

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

10

Başka birinin buna ihtiyacı varsa, bunu yapın:

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

veya bir işlev istiyorsanız:

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

Nerede tarih için kontrol etmek istediğiniz tarihtir.

açıklama

moment(0, "HH") bugünün gece yarısında döner.

date1.diff(date2, "days") tarih1 ve tarih2 arasındaki gün sayısını döndürür.

Güncelleme

O zamandan beri bir tarih bugün olup olmadığını anlamak için kullanılacak doğru işlevi olduğuna inanıyorum isSame işlevini buldum :

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

8

Bugün olup olmadığını kontrol etmek için :

Zaman tarihini de içeren iki tarihi karşılaştırırsak, zaman bilgisi isSamekesinlikle başarısız olacaktır. diffiki tarihin yeni güne yayılması durumunda başarısız olur:

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

Hızlı ve kısa olmasa bile en iyi yolun şu olduğunu düşünüyorum:

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

Gelecekte olup olmadığını kontrol etmek için :

Diğer kullanıcılar tarafından da önerildiği gibi, diffyöntem çalışır.

var isFuture = now.diff(anotherDate) < 0 

7

Yalnızca hangisinin daha büyük olduğunu bilmeniz gerekiyorsa, bunları doğrudan da karşılaştırabilirsiniz:

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');
}

Bu yardımcı olur umarım!


4

firstDate aynı veya (future) sonra secondDate return true else else return false. Toda firstDate = new Date ();

  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;
  }

İsSame, isBefore ve isAfter için bir gün anı örneği var;

  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

Gelecekteki tarihi kontrol etmek için en basit olanı kullanın

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;
}

Ve sonra sadece bu satırı kullanın:

isTodayOrFuture(YOUR_TEST_DATE_HERE)

1

İle geçmiş günleri kontrol edip etmemek için dün seçin moment().subtract(1, "day");

Referans: - 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

Eğer zaman olmadan fark istiyorsak, tarihin biçimini kullanarak tarihi aşağıdaki gibi farklı (sadece zaman olmadan tarih) alabilirsiniz.

Yaparken farkla ilgili sorun yaşıyordum;

moment().diff([YOUR DATE])

Böylece, aşağıdaki ile geldi;

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

Geliştirilecek bir şey varsa lütfen yorum yapmaktan çekinmeyin.

Teşekkürler,


3
Lütfen iyi bir cevap nasıl yazılır bölümünü inceleyin . Yalnızca kod yanıtları, sorunu nasıl çözdüklerini açıklamadığı için önerilmez. Bunun ne olduğunu ve bu sorunun zaten sahip olduğu birçok cevapta nasıl geliştiğini açıklamak için cevabınızı güncellemelisiniz .
FluffyKitten

0

başka bir şey için istedim ama sonunda deneyebileceğiniz bir numara buldum

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

aşağıdakileri kontrol edin:

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

saniyeler içinde geri dönüyor ..

2 dakika koşulu olarak kontrol ederseniz

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

0

En basit cevap:

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

Gece yarısı değerini kontrol edecek ve doğru bir sonuç verecektir. İki tarih arasındaki zaman farkı 24 saatten az olduğunda da çalışacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.