Момент JS дата и время сравнить - PullRequest
0 голосов
/ 08 июня 2018

Я делаю вызов API из функции javascript, которая правильно возвращает ответ JSON.Но при переходе через ответ JSON я получаю предупреждение об устаревании, а также сообщение об ошибке в Function.createFromInputFallback (line.js line: 320), когда я попадаю в строку с moment().isSameOrBefore.Я довольно новичок в javascript и особенно в пакетах для Node.

По сути, я хотел бы установить, какой прогнозируемый прилив является ближайшим к текущему времени, когда эта функция выполняется.Это правильный способ использования параметра moment().isSameOrBefore и / или я должен изменить код, чтобы сделать это по-другому?

Вот JSON:

{ "predictions" : [ {"t":"2018-06-08 03:06", "v":"3.795", "type":"H"},{"t":"2018-06-08 09:25", "v":"0.443", "type":"L"},{"t":"2018-06-08 15:51", "v":"3.884", "type":"H"},{"t":"2018-06-08 22:01", "v":"0.778", "type":"L"} ]}

Вот моя функция:

const getTide = require('./modules/getTide.js');

var moment = require('moment');

async function testMod() {
    await getTide.getQuote().then(function(value){
        const parsedData = JSON.parse(value);       
        let text = " "; 
        // This loop steps through the JSON response row by row to test the data
        var i;
        for (i = 0; i < parsedData.predictions.length; i++) { 
            text += 'Record #' + i + ' = ' + parsedData.predictions[i].t + " " + parsedData.predictions[i].v + " " + parsedData.predictions[i].type + " - ";            
            let curDateTime = moment().format('LLL');           
            let theDate = moment(parsedData.predictions[i].t).format('LLL'); 
            let fromNow = moment(parsedData.predictions[i].t).fromNow(); 
            if (parsedData.predictions[i].type === "H") {
                    console.log('High tide for ' + parsedData.predictions[i].t + ', at ' + parsedData.predictions[i].v + ' vertical Feet. ');                                  
                    if (moment(theDate).isSameOrBefore(curDateTime)) {
                       console.log('It is currently ' + curDateTime + ' and that high tide was ' + fromNow);
                    } else {
                       console.log('It is currently ' + curDateTime + ' and that high tide is ' + fromNow + ' from now!');  
                    }                   
                  } else {
                    console.log('Low tide for ' + parsedData.predictions[i].t + ', at ' + parsedData.predictions[i].v + ' vertical Feet. ');
                    if (moment(theDate).isSameOrBefore(curDateTime)) {
                       console.log('It is currently ' + curDateTime + ' and that low tide was ' + fromNow);
                    } else {
                       console.log('It is currently ' + curDateTime + ' and that low tide is ' + fromNow + ' from now!');   
                    }               
                  }     
        }
    }, function(error){
        console.log("problem");
    });
}

testMod();

1 Ответ

0 голосов
/ 09 июня 2018

Я думаю, что часть проблемы в том, что вы используете отформатированные строки для создания экземпляров момента вместо того, чтобы просто использовать сам экземпляр момента.Поэтому вместо того, чтобы делать это:

let curDateTime = moment().format('LLL');           
let theDate = moment(parsedData.predictions[i].t).format('LLL'); 
// ...
moment(theDate).isSameOrBefore(curDateTime);

Попробуйте:

let curDateTime = moment();
let theDate = moment(parsedData.predictions[i].t);
// ...
theDate.isSameOrBefore(curDateTime); // because theDate is now a moment instance, you can call this function on it

При работе с моментом всегда полезно сохранять даты и время сохраненными в качестве экземпляров момента, пока вам не потребуется их отобразить.затем пользователь может выполнить:

theDate.format('LLL');

Я думаю, что вы получаете предупреждение, потому что вы пытаетесь создать экземпляр момента со строкой в ​​формате 'LLL', момент которогожалоба («Предупреждение об устаревании: предоставленное значение не в распознанном формате RFC2822 или ISO.» - это предупреждение, которое я вижу).Если вы хотите проанализировать эти форматы, вы также должны указать формат:

moment('September 4, 1986 8:30 PM', 'LLL').format('YYYY-MM-DD H:mm'); // won't complain
...