Jdtounix: примеры (PHP)

Функция 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

mktime() и gmmktime()

Функции для создания Unix timestamp из отдельных компонентов даты. Работают с григорианским календарем и локальным временем или временем по Гринвичу.

echo mktime(0, 0, 0, 1, 1, 2000);
946684800
strtotime()

Преобразует текстовое представление даты на английском языке в Unix timestamp. Поддерживает относительные форматы дат.

echo strtotime('2000-01-01 UTC');
946684800
DateTime и DateTimeImmutable

Объектно-ориентированный подход к работе с датами. Поддерживает различные календарные системы через расширение 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

PHP 8.0.0

Версия функции jdtounix не претерпела значительных изменений в последних версиях PHP. Основные изменения касаются обработки ошибок и строгости типов.

Совместимость

Функция доступна во всех версиях PHP, начиная с PHP 4. Поведение функции остается стабильным на протяжении всех выпусков.

Будущие изменения

В документации PHP нет информации о планируемых изменениях для этой функции в ближайших версиях.

Расширенные примеры

Работа с историческими датами

Конвертация юлианской даты исторического события:

Пример php
$julianDate = 2299160.5; // 4 октября 1582 года
$timestamp = jdtounix($julianDate);
echo date('Y-m-d', $timestamp);
1582-10-04
Расчет астрономических периодов

Вычисление времени между двумя астрономическими событиями:

Пример php
$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

Создание объекта DateTime из юлианской даты:

Пример php
$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
Проверка корректности преобразования

Верификация преобразований через обратные вычисления:

Пример php
$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

Альтернативы в других языках

Python: calendar.timegm()

Преобразует структуру времени в UTC в секунды с начала эпохи. Требует предварительного преобразования в кортеж struct_time.

import calendar
import datetime
dt = datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
print(calendar.timegm(dt.timetuple()))
946684800
JavaScript: Date.getTime()

Метод возвращает количество миллисекунд с 1 января 1970 года. Для секунд требуется деление на 1000.

const date = new Date('2000-01-01T00:00:00Z');
console.log(Math.floor(date.getTime() / 1000));
946684800
MySQL: UNIX_TIMESTAMP()

Функция возвращает Unix timestamp для даты. Может работать без аргументов для текущего времени.

SELECT UNIX_TIMESTAMP('2000-01-01 00:00:00');
946684800

PHP jdtounix function comments

En
Jdtounix Convert Julian Day to Unix timestamp