Jdtojewish: примеры (PHP)
jdtojewish(int $julian_day, bool $hebrew = false, int $flags = 0): stringФункция 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;
?>כסלו כה תשפ״הПрямых аналогов для конвертации в еврейский календарь нет, но есть функции для работы с юлианскими днями и другими календарями.
- gregoriantojd(), juliantojd(), jdtogregorian(), jdtounix() — функции для конвертации между григорианским, юлианским календарями и юлианскими днями. Используются как вспомогательные для
jdtojewish(). - IntlCalendar (расширение intl) — предоставляет более мощные методы работы с различными календарными системами, включая еврейскую, но с другим API и зависимостью от расширения.
- DateTime с расширением intl — позволяет создавать объекты для еврейского календаря и форматировать их через
IntlDateFormatter. Этот подход предпочтительнее для сложного форматирования, локализации и в современных приложениях, так как он более гибкий и соответствует стандартам ICU.
В 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()) # Форматированный вывод'ח׳ טבת ה׳תשפ״ג'Библиотеки 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')); // На иврите'ח׳ טבת ה׳תשפ״ג'Функция 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.0.0 был добавлен третий аргумент fl для управления форматом вывода при использовании параметра hebrew = true. В более ранних версиях функция принимала только два аргумента, и порядок вывода на иврите был фиксированным (день, месяц, год).
Начиная с PHP 8.0.0, функция также больше не возвращает false в случае незначительных ошибок (например, неверный флаг), а вместо этого игнорирует неверные параметры и возвращает результат по умолчанию. Это изменение связано с переходом на более строгую типизацию.
Использование флага для получения названия праздника.
<?php
// Дата праздника Пурим в 2024 году (по григорианскому календарю ~24 марта)
$jd = gregoriantojd(3, 24, 2024);
$hebrewHoliday = jdtojewish($jd, true, 2);
echo $hebrewHoliday;
?>פוריםКонвертация массива дат.
<?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Более современный способ с локализацией.
<?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
$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 лет