簡體   English   中英

Moment js日期時間比較

[英]Moment js date time comparison

我正在使用 moment.js 來格式化我的日期時間,這里我有兩個日期值,我想在一個日期大於另一個日期時實現特定的 function。 我閱讀了他們的大部分文檔,但沒有找到 function 來實現這一點。 我知道它會在那里。

這是我的代碼:

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date 

var now = new Date(),
    dnow = moment(now).tz('UTC'),
    snow = dnow.minute() % 15,
    diffnow = 15 - snow,
    tonow = moment(dnow).add('minute', diffnow),
    ahead30now = moment(tonow).add('minute', 30);

if (d > ahead30now) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}

編輯

var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
    console.log('is after true');
} else {
    console.log('is after is false');
}

在這里,我正在比較兩個日期,即2014-03-24T01:15:000 > 2014-03-24T01:14:000 ,期望第一個大於第二個,但它總是進入 else 條件。 我不知道為什么?

我相信您正在尋找查詢函數isBeforeisSameisAfter

但是要確切地說出您正在嘗試的內容有點困難。 也許您只是想了解輸入時間和當前時間之間的差異? 如果是這樣,請考慮差異函數diff 例如:

moment().diff(date_time, 'minutes')

其他一些事情:

  • 第一行有錯誤:

     var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'

    那是行不通的。 我想你的意思是:

     var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';

    當然,你也可以:

     var date_time = '2013-03-24T10:15:20:12Z';
  • 您正在使用: .tz('UTC')不正確。 .tz屬於moment-timezone 您不需要使用它,除非您使用其他時區,例如America/Los_Angeles

    如果要將值解析為 UTC,請使用:

     moment.utc(theStringToParse)

    或者,如果要解析本地值並將轉換為 UTC,請使用:

     moment(theStringToParse).utc()

    或者你根本不需要它。 僅僅因為輸入值是 UTC,並不意味着您必須在整個函數中使用 UTC。

  • 您似乎正在通過moment(new Date())獲取“now”實例。 您可以改為使用moment()

更新

根據您的編輯,我認為您可以這樣做:

var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');

或者,如果您想確保您的字段被驗證為正確格式:

var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD  HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');

您應該能夠直接比較它們。

var date = moment("2013-03-24")
var now = moment();

if (now > date) {
   // date is past
} else {
   // date is future
}

 $(document).ready(function() { $('.compare').click(function(e) { var date = $('#date').val(); var now = moment(); var then = moment(date); if (now > then) { $('.result').text('Date is past'); } else { $('.result').text('Date is future'); } }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <input type="text" name="date" id="date" value="2014-12-18" placeholder="yyyy-mm-dd"> <button class="compare">Compare date to current date</button> <br> <div class="result"></div>

jsfiddle: http : //jsfiddle.net/guhokemk/1/

 function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));

如果 dateTimeA 大於 dateTimeB,該方法返回 1

如果 dateTimeA 等於 dateTimeB,該方法返回 0

如果 dateTimeA 小於 dateTimeB,該方法返回 -1

使用任何momentjs 查詢時,日期時間采用正確的ISO 格式很重要: isBeforeisAfterisSameOrBeforeisSameOrAfterisBetween

所以不是 2014-03-24T01:14:000,你的日期時間應該是:

2014-03-24T01:14:002014-03-24T01:14:00.000Z

否則,您可能會收到以下棄用警告,並且條件將評估為 false:

棄用警告:提供的值不是公認的 RFC2822 或 ISO 格式。 moment 構造回退到 js Date(),這在所有瀏覽器和版本中都不可靠。 不鼓勵使用非 RFC2822/ISO 日期格式,並將在即將發布的主要版本中刪除。 請參閱http://momentjs.com/guides/#/warnings/js-date/了解更多信息。

 // https://momentjs.com/docs/#/query/ const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z')); const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z')); const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z')); console.log(`Date is After: ${dateIsAfter}`); console.log(`Date is Same: ${dateIsSame}`); console.log(`Date is Before: ${dateIsBefore}`);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js" ></script>

moment(d).isAfter(ahead30now); // true

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

if (moment(d).isAfter(ahead30now)) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}

像這樣將日期傳遞給時刻,它將比較並給出結果。 如果你不想格式化刪除它

moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")

對於日期時間比較,您可以使用時刻的valueOf函數,它提供日期時間的毫秒數,最適合比較:

 let date1 = moment('01-02-2020','DD-MM-YYYY').valueOf() let date2 = moment('11-11-2012','DD-MM-YYYY').valueOf() // alert((date1 > date2 ? 'date1' : 'date2') + " is greater..." ) if (date1 > date2) { alert("date1 is greater..." ) } else { alert("date2 is greater..." ) }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

在我的情況下,如果報價開始日期小於當前日期,而用戶從交易歷史記錄中打開報價,則必須執行此操作,我需要將當前日期顯示為開始日期。

var startDate = "20/05/2018";

var date1 = moment().format("YYYY-MM-DD");
var date2 = moment(startDate).format("YYYY-MM-DD");

// and i checked with if statement 

if(date1 >  date2){   // if startDate is less than today
   startDate = date1;
}else{ // if startDate is greater than today

}

注意:對我來說,它需要將兩個日期都轉換為相同的格式,並且我使用了“ YYYY-MM-DD”。

var startDate = moment(startDateVal, "DD.MM.YYYY");//Date format
var endDate = moment(endDateVal, "DD.MM.YYYY");

var isAfter = moment(startDate).isAfter(endDate);

if (isAfter) {
    window.showErrorMessage("Error Message");
    $(elements.endDate).focus();
    return false;
}

說如果你想在日期選擇器中禁用過去的日期,下面的代碼肯定會幫助你 disabledDate={(current) => { return ( current && current.format("YYYY-MM-DD") < moment().格式(“YYYY-MM-DD”)); }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM