Jdtounix: примеры (PHP)
jdtounix(int $julian_day): intФункция jdtounix
Функция jdtounix преобразует дату в формате юлианского дня в количество секунд, прошедших с начала эпохи Unix (1 января 1970 года). Это специализированная функция для работы с астрономическими календарями и историческими датами.
Функция используется в научных расчетах, астрономических программах, исторических исследованиях и при работе с календарными системами, отличными от григорианского календаря. Она позволяет конвертировать юлианские даты в стандартный Unix timestamp для дальнейших вычислений.
julianday - единственный аргумент, число с плавающей точкой, представляющее количество юлианских дней. Аргумент должен находиться в диапазоне от 2440588 до 106751993607888. Для дат до 1 января 1970 года значение будет отрицательным.
Примеры использования
Конвертация юлианской даты в Unix timestamp:
$julianDate = 2451545.0;
$timestamp = jdtounix($julianDate);
echo $timestamp;946728000
Использование дробной части юлианской даты для точного времени:
$julianDate = 2451545.5;
$timestamp = jdtounix($julianDate);
echo $timestamp;946771200
Проверка преобразования через обратную функцию:
$julianDate = 2451545.0;
$timestamp = jdtounix($julianDate);
$convertedBack = unixtojd($timestamp);
echo round($convertedBack, 2);2451545.00
Похожие функции в PHP
Функции для создания Unix timestamp из отдельных компонентов даты. Работают с григорианским календарем и локальным временем или временем по Гринвичу.
echo mktime(0, 0, 0, 1, 1, 2000);946684800
Преобразует текстовое представление даты на английском языке в Unix timestamp. Поддерживает относительные форматы дат.
echo strtotime('2000-01-01 UTC');946684800
Объектно-ориентированный подход к работе с датами. Поддерживает различные календарные системы через расширение intl.
$date = new DateTime('2000-01-01');
echo $date->getTimestamp();946684800
Типичные ошибки
При передаче значения за пределами допустимого диапазона функция вернет false:
$result = jdtounix(1000000);
var_dump($result);bool(false)
Передача нечислового значения может привести к неожиданным результатам:
$result = jdtounix('invalid');
var_dump($result);bool(false)
Дробная часть юлианской даты может быть округлена при преобразовании:
$julianDate = 2451545.123456;
$timestamp = jdtounix($julianDate);
echo $timestamp - jdtounix(floor($julianDate));10656
Изменения в версиях PHP
Версия функции jdtounix не претерпела значительных изменений в последних версиях PHP. Основные изменения касаются обработки ошибок и строгости типов.
Функция доступна во всех версиях PHP, начиная с PHP 4. Поведение функции остается стабильным на протяжении всех выпусков.
В документации PHP нет информации о планируемых изменениях для этой функции в ближайших версиях.
Расширенные примеры
Конвертация юлианской даты исторического события:
$julianDate = 2299160.5; // 4 октября 1582 года
$timestamp = jdtounix($julianDate);
echo date('Y-m-d', $timestamp);1582-10-04
Вычисление времени между двумя астрономическими событиями:
$jd1 = 2451545.0; // 1 января 2000 года
$jd2 = 2456293.5; // 1 января 2013 года
$seconds = jdtounix($jd2) - jdtounix($jd1);
$years = $seconds / (365.25 * 24 * 3600);
echo round($years, 2);13.00
Создание объекта DateTime из юлианской даты:
$julianDate = 2451545.0;
$timestamp = jdtounix($julianDate);
$dateTime = (new DateTime())->setTimestamp($timestamp);
echo $dateTime->format('Y-m-d H:i:s');2000-01-01 12:00:00
Верификация преобразований через обратные вычисления:
$testDates = [2451545.0, 2453750.5, 2456109.75];
foreach ($testDates as $jd) {
$ts = jdtounix($jd);
$back = unixtojd($ts);
echo sprintf('JD: %.3f -> TS: %d -> JD: %.3f', $jd, $ts, $back) . '\n';
}JD: 2451545.000 -> TS: 946728000 -> JD: 2451545.000 JD: 2453750.500 -> TS: 1009843200 -> JD: 2453750.500 JD: 2456109.750 -> TS: 1072886400 -> JD: 2456109.000
Альтернативы в других языках
Преобразует структуру времени в UTC в секунды с начала эпохи. Требует предварительного преобразования в кортеж struct_time.
import calendar
import datetime
dt = datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
print(calendar.timegm(dt.timetuple()))946684800
Метод возвращает количество миллисекунд с 1 января 1970 года. Для секунд требуется деление на 1000.
const date = new Date('2000-01-01T00:00:00Z');
console.log(Math.floor(date.getTime() / 1000));946684800
Функция возвращает Unix timestamp для даты. Может работать без аргументов для текущего времени.
SELECT UNIX_TIMESTAMP('2000-01-01 00:00:00');946684800