Отобразить строку даты и времени iso8601 в юлианский день, используя JavaScript

У кого-нибудь есть компактная / элегантная карта из строки даты-времени ISO-8601 следующего вида:

2013-12-28T20:30:00-0700

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

1 ответ

Вот один из способов сделать это.

Вы можете преобразовать строку ISO - также со смещением часового пояса - в JavaScript Date объект в современном JavaScript (ES5). Это работает в Node.js, Chrome и Firefox. Это еще не поддерживается в Safari или IE. Если вам нужно, чтобы он работал во всех браузерах, вам нужно проанализировать дату самостоятельно или использовать библиотеку, такую ​​как Moment.js.

Я проверил этот алгоритм на американском военно-морском обсерватории с помощью конвертера дат Джулиана для ряда дат.

Для дат, предшествующих григорианскому переходу (15 октября 1582 г.), это предполагает, что Григорианский календарь имеет пролептический характер и будет отличаться от того, что показывает Военно-морская обсерватория США.

function julianDayNumber(d) {
  var epoch = 2440587.500000;                   // Jan. 1, 1970 00:00:00 UTC
  return d.getTime() / 86400000 + epoch;
}

Пример использования:

console.log(julianDayNumber(new Date('2013-12-28T20:30:00-0700')));
// prints: 2456655.6458333335
Другие вопросы по тегам