Я хочу преобразовать номер даты по юлианскому календарю в обычную дату, которая является форматом даты UTC в JavaScript. Например, у меня есть юлианский номер "57115". Я хочу конвертировать в такой формат, как 10 апреля 2015 г..
Преобразование номера даты по юлианскому календарю в обычную дату (UTC) в javascript
Ответы (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)));
Хорошо известный метод нумерации дней со значением 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 по Гринвичу.
Вот формула:
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)