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

Конвертация дат в еврейский календарь с помощью jdtojewish
Раздел: Дата и время
jdtojewish(int $julian_day, bool $hebrew = false, int $flags = 0): string
Описание функции jdtojewish

Функция jdtojewish() преобразует юлианскую дату (Julian Day Count) в дату еврейского календаря. Она применяется для работы с историческими или религиозными датами в системах, связанных с иудаизмом.

Функция доступна в стандартной библиотеке PHP и не требует установки дополнительных расширений.

Аргументы функции
  • juliandaycount (целое число): обязательный аргумент. Представляет собой корректный юлианский день (целое число больше 0).
  • hebrew (логический, необязательный, по умолчанию false): если установлено в true, функция возвращает дату в виде строки на иврите с использованием кодировки ISO-8859-8.
  • fl (целое число, необязательный, добавлен в PHP 8.0): параметр для управления форматом вывода при hebrew = true. Может принимать значения:
    • 0 (по умолчанию): последовательность «день, месяц, год».
    • 1: последовательность «месяц, день, год».
    • 2: только дата праздника (если применимо).

Возвращает строку с датой в формате «месяц/день/год» (или на иврите) в случае успеха, иначе false.

Короткие примеры использования
Базовое преобразование

Преобразование юлианской даты в стандартный формат.

<?php
// Юлианский день для 1 января 2023 года
$jd = gregoriantojd(1, 1, 2023);
$hebrewDate = jdtojewish($jd);
echo $hebrewDate;
?>
10/8/5783
Вывод на иврите

Использование параметра hebrew.

<?php
$jd = gregoriantojd(15, 4, 2024);
$hebrewDate = jdtojewish($jd, true);
echo $hebrewDate;
?>
טז ניסן תשפ״ד
Использование флага формата

Изменение порядка вывода компонентов даты на иврите.

<?php
$jd = gregoriantojd(25, 12, 2024);
$hebrewDate = jdtojewish($jd, true, 1);
echo $hebrewDate;
?>
כסלו כה תשפ״ה
Похожие функции в PHP

Прямых аналогов для конвертации в еврейский календарь нет, но есть функции для работы с юлианскими днями и другими календарями.

  • gregoriantojd(), juliantojd(), jdtogregorian(), jdtounix() — функции для конвертации между григорианским, юлианским календарями и юлианскими днями. Используются как вспомогательные для jdtojewish().
  • IntlCalendar (расширение intl) — предоставляет более мощные методы работы с различными календарными системами, включая еврейскую, но с другим API и зависимостью от расширения.
  • DateTime с расширением intl — позволяет создавать объекты для еврейского календаря и форматировать их через IntlDateFormatter. Этот подход предпочтительнее для сложного форматирования, локализации и в современных приложениях, так как он более гибкий и соответствует стандартам ICU.
Альтернативы в других языках
Python

В Python используется библиотека hdate или pyluach для работы с еврейским календарем. В стандартной библиотеке нет прямой аналогии.

# Установка: pip install hdate
from hdate import Hdate
from datetime import date
greg_date = date(2023, 1, 1)
hebrew_date = Hdate(greg_date)
print(hebrew_date.hebrew_date_string())  # Форматированный вывод
'ח׳ טבת ה׳תשפ״ג'
JavaScript

Библиотеки hebcal или @jdates/core. Нативная поддержка отсутствует.

// Использование hebcal
// Установка: npm install hebcal
import {HebrewDate} from 'hebcal';
const hd = new HebrewDate(new Date(2023, 0, 1));
console.log(hd.render('he')); // На иврите
'ח׳ טבת ה׳תשפ״ג'
MySQL

Функция DATE_FORMAT() с использованием календарных преобразований не поддерживает еврейский календарь напрямую. Обычно даты хранятся в григорианском формате, а преобразование выполняется на уровне приложения.

Типичные ошибки
Некорректный юлианский день

Передача отрицательного, нулевого или нечислового значения.

<?php
$result = jdtojewish(-1);
var_dump($result);
?>
bool(false)
Неправильная кодировка для вывода на иврите

При выводе строки на иврите в веб-странице без указания кодировки могут отображаться «крокозябры».

<?php
$jd = gregoriantojd(1, 1, 2023);
$hebrewStr = jdtojewish($jd, true);
echo $hebrewStr; // Может отображаться некорректно, если кодировка страницы не ISO-8859-8 или UTF-8
?>
Использование неверного флага

Передача недопустимого значения аргумента fl.

<?php
$jd = gregoriantojd(1, 1, 2023);
$hebrewStr = jdtojewish($jd, true, 99); // Несуществующий флаг
var_dump($hebrewStr);
?>
string(20) "ח׳ טבת ה׳תשפ״ג" // В PHP 8 функция игнорирует неверный флаг
Изменения в PHP 8

В PHP 8.0.0 был добавлен третий аргумент fl для управления форматом вывода при использовании параметра hebrew = true. В более ранних версиях функция принимала только два аргумента, и порядок вывода на иврите был фиксированным (день, месяц, год).

Начиная с PHP 8.0.0, функция также больше не возвращает false в случае незначительных ошибок (например, неверный флаг), а вместо этого игнорирует неверные параметры и возвращает результат по умолчанию. Это изменение связано с переходом на более строгую типизацию.

Расширенные примеры
Определение еврейского праздника

Использование флага для получения названия праздника.

Пример php
<?php
// Дата праздника Пурим в 2024 году (по григорианскому календарю ~24 марта)
$jd = gregoriantojd(3, 24, 2024);
$hebrewHoliday = jdtojewish($jd, true, 2);
echo $hebrewHoliday;
?>
פורים
Массовое преобразование дат

Конвертация массива дат.

Пример php
<?php
$gregorianDates = [
    '2023-09-16',
    '2024-04-23',
    '2025-12-10'
];
foreach ($gregorianDates as $dateStr) {
    [$y, $m, $d] = explode('-', $dateStr);
    $jd = gregoriantojd($m, $d, $y);
    echo jdtojewish($jd) . "\n";
}
?>
1/1/5784
15/7/5784
19/2/5786
Форматирование с использованием IntlDateFormatter

Более современный способ с локализацией.

Пример php
<?php
$formatter = new IntlDateFormatter(
    'he_IL@calendar=hebrew',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'UTC',
    IntlDateFormatter::TRADITIONAL
);
$jd = gregoriantojd(1, 1, 2023);
// jdtojewish не требуется, Intl работает с меткой времени Unix
$ts = jdtounix($jd); // Преобразуем юлианский день в Unix-время
echo $formatter->format($ts);
?>
יום ראשון, 8 בטבת ה׳תשפ״ג
Расчет разницы между датами

Вычисление возраста по еврейскому календарю.

Пример php
<?php
$birthJD = gregoriantojd(5, 15, 1990);
$currentJD = gregoriantojd(1, 1, 2023);
$birthJewish = explode('/', jdtojewish($birthJD));
$currentJewish = explode('/', jdtojewish($currentJD));
$age = $currentJewish[2] - $birthJewish[2];
// Учитываем месяц и день
if ($currentJewish[1] < $birthJewish[1] || 
   ($currentJewish[1] == $birthJewish[1] && $currentJewish[0] < $birthJewish[0])) {
    $age--;
}
echo "Возраст по еврейскому календарю: $age лет";
?>
Возраст по еврейскому календарю: 32 лет

PHP jdtojewish function comments

En
Jdtojewish Converts a Julian day count to a Jewish calendar date