moment.js не учитывает год при преобразовании даты в метку времени Unix - PullRequest
1 голос
/ 01 мая 2019

Мне нужно найти разницу между 2 датами, 30/05/2019 и 30/04/2020. Я использую этот код:

var checkinTime  = moment('30/05/2019', 'DD/MM/YYYY').unix();
var checkoutTime = moment('30/04/2020', 'DD/MM/YYYY').unix();

Значение 2019 является правильным, но значение 2020 возвращается, как если бы оно было 2019. Возвращаемыми значениями являются «1590760800» и «1588168800» соответственно. Первая временная метка должна быть меньше второй временной метки, но больше (на месяц).

Как мне принять во внимание будущие годы?

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Вот пример в простом Javascript.

Обратите внимание, что объекты даты в Javascript имеют временные метки с разрешением в миллисекундах, а время Unix обычно в секундах.

function parseDDMMYYY(input) {
  const dateArrayText = input.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
  if (!dateArrayText) return NaN;

  // Decode dateArrayText to numeric values that can be used by the Date constructor.
  const date = {
    year : +dateArrayText[3],
    month : (+dateArrayText[2]) - 1, // month is zero based in date object.
    day : +dateArrayText[1]
  }
  const dateObject = new Date( date.year, date.month, date.day );
  // Check validity of date. The date object will accept 2000-99-99 as input and
  // adjust the date to 2008-07-08. To prevent that, and make sure the entered
  // date is a valid date, I check if the entered date is the same as the parsed date.
  if (
    !dateObject
    || date.year !== dateObject.getFullYear()
    || date.month !== dateObject.getMonth()
    || date.day != dateObject.getDate()
  ) {
    return NaN;
  }
  return dateObject;
}

const date1 = parseDDMMYYY('30/05/2019');
const date2 = parseDDMMYYY('30/04/2019');
const diffInMs = date2 - date1;
const diffInSeconds = Math.floor( (date2 - date1) / 1000 );

console.log( diffInMs );
console.log( diffInSeconds );
1 голос
/ 01 мая 2019

Ваш код кажется правильным.Я попробовал следующий код.

index.js

var moment = require('moment');

var checkinTime  = moment('30/05/2019', 'DD/MM/YYYY').unix();
var checkoutTime = moment('30/04/2020', 'DD/MM/YYYY').unix();

console.log(' checkinTime: ' + checkinTime);
console.log('checkoutTime: ' + checkoutTime);
console.log('  diff dates: ' + (checkoutTime - checkinTime) / 86400);

checkinTime было меньше, чем checkoutTime, а разница дат составляла 336, как показано ниже.

$ node index.js
 checkinTime: 1559142000
checkoutTime: 1588172400
   diff dates: 336
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...