Преобразование номера даты по юлианскому календарю в обычную дату (UTC) в javascript

Я хочу преобразовать номер даты по юлианскому календарю в обычную дату, которая является форматом даты UTC в JavaScript. Например, у меня есть юлианский номер "57115". Я хочу конвертировать в такой формат, как 10 апреля 2015 г..


person Dhrumil Kabaria    schedule 14.04.2015    source источник
comment
некоторые из нас не знают юлианского числа. поэтому, если бы вы могли дать больше объяснений по этому поводу. разместите свой код, чтобы помочь вам больше.   -  person Yazan W Yusuf    schedule 14.04.2015
comment
Дублировать stackoverflow.com/questions/26370688/?   -  person Yazan W Yusuf    schedule 14.04.2015


Ответы (3)


попробуйте приведенный ниже код

var X = parseFloat(57115)+0.5;
var Z = Math.floor(X); //Get day without time
var F = X - Z; //Get time
var Y = Math.floor((Z-1867216.25)/36524.25);
var A = Z+1+Y-Math.floor(Y/4);
var B = A+1524;
var C = Math.floor((B-122.1)/365.25);
var D = Math.floor(365.25*C);
var G = Math.floor((B-D)/30.6001);
//must get number less than or equal to 12)
var month = (G<13.5) ? (G-1) : (G-13);
//if Month is January or February, or the rest of year
var year = (month<2.5) ? (C-4715) : (C-4716);
month -= 1; //Handle JavaScript month format
var UT = B-D-Math.floor(30.6001*G)+F;
var day = Math.floor(UT);
//Determine time
UT -= Math.floor(UT);
UT *= 24;
var hour = Math.floor(UT);
UT -= Math.floor(UT);
UT *= 60;
var minute = Math.floor(UT);
UT -= Math.floor(UT);
UT *= 60;
var second = Math.round(UT);
alert(new Date(Date.UTC(year, month, day, hour, minute, second)));
person Kaustav Banerjee    schedule 14.04.2015
comment
Что оно делает? Как он делает то, что должен делать? - person Salman A; 14.04.2015
comment
код в значительной степени говорит вам, как это правильно? Что касается того, он преобразует юлианскую дату в дату UTC.... Как видно из вопроса - person Kaustav Banerjee; 15.04.2015
comment
Можете ли вы указать источник, из которого был скопирован этот код? - person Salman A; 15.04.2015
comment
Что делать, если код не был скопирован?? - person Richard McFriend Oluwamuyiwa; 10.03.2021

Хорошо известный метод нумерации дней со значением 57 115 в апреле 2015 года — это модифицированная юлианская дата (MJD). Это количество дней с полуночи начала григорианского календаря 17 ноября 1858 года по всемирному времени (UT). UT является преемником устаревшей аббревиатуры GMT. MJD всегда в UT. Время дня может быть представлено в виде доли дня, поэтому 0,75 MJD будет 18:00 17 ноября 1858 года по всемирному времени. Я буду игнорировать тонкую разницу между UT и UTC до секунды или около того, поскольку точность популярных персональных вычислительных устройств составляет в лучшем случае всего несколько секунд. Вот пример того, как сделать преобразование, используя встроенный объект Date.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"> 

<HTML>
<BODY>
<pre>
<script language="JavaScript">
// Origin of Modified Julian Date (MJD) is 00:00 November 17, 1858 of
// the Gregorian calendar
// Internal JavaScript built in Date object internal time value 0
//milliseconds (ms) is 00:00 January 1, 1970, UT,
// equal to MJD 40587
// Internal value of MJD origion should be
//negative 40587 days * 86,400,000 milliseconds per day =
// 3,506,716,800,000 ms
var originMJD = -3506716800000;
document.write("Test creation of date object containing origin of MJD.");
document.write(new Date(-3506716800000).toUTCString());
document.writeln(" should be Wed, 17 Nov 1858 00:00:00 UT.");
//Given an MJD display the Gregorian calendar date and time.
var inMJD = 57115;
var inInternal = (inMJD * 86400000) + originMJD;
document.writeln();
document.writeln("Input MJD is ", inMJD, ".");
document.write("Equivalent Gregorian calendar date and time is ",
new Date(inInternal).toUTCString(), ".");
</script>
</pre>
</BODY>
</HTML>

Вывод примера должен быть:

Протестируйте создание объекта даты, содержащего источник MJD. Среда, 17 ноября 1858 г., 00:00:00 по Гринвичу, должна быть среда, 17 ноября 1858 г., 00:00:00 UT.

Введите MJD: 57115. Эквивалентная дата и время по григорианскому календарю: пятница, 03 апреля 2015 г., 00:00:00 по Гринвичу.

person Gerard Ashton    schedule 21.05.2015

Вот формула:

  Q = JD+0.5
  Z = Integer part of Q
  W = (Z - 1867216.25)/36524.25
  X = W/4
  A = Z+1+W-X
  B = A+1524
  C = (B-122.1)/365.25
  D = 365.25xC
  E = (B-D)/30.6001
  F = 30.6001xE
  Day of month = B-D-F+(Q-Z)
  Month = E-1 or E-13 (must get number less than or equal to 12)
  Year = C-4715 (if Month is January or February) or C-4716 (otherwise)

Источник

person alexP    schedule 14.04.2015