xref: /webtrees/app/Date/HijriDate.php (revision 1e71bdc0ba6fc5add8fed9a3beb51cfca09e47dd)
1<?php
2namespace Fisharebest\Webtrees;
3
4/**
5 * webtrees: online genealogy
6 * Copyright (C) 2015 webtrees development team
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19use Fisharebest\ExtCalendar\ArabicCalendar;
20
21/**
22 * Class HijriDate - Definitions for the Hijri calendar.
23 *
24 * Note that these are "theoretical" dates.
25 * "True" dates are based on local lunar observations, and can be a +/- one day.
26 */
27class HijriDate extends CalendarDate {
28	const CALENDAR_ESCAPE = '@#DHIJRI@';
29	const CAL_START_JD = 1948440; // @#DHIJRI@ 1 MUHAR 0001 = @#JULIAN@ 16 JUL 0622
30
31	/** {@inheritdoc} */
32	public static $MONTH_ABBREV = array('' => 0, 'MUHAR' => 1, 'SAFAR' => 2, 'RABIA' => 3, 'RABIT' => 4, 'JUMAA' => 5, 'JUMAT' => 6, 'RAJAB' => 7, 'SHAAB' => 8, 'RAMAD' => 9, 'SHAWW' => 10, 'DHUAQ' => 11, 'DHUAH' => 12);
33
34	/** {@inheritdoc} */
35	public function __construct($date) {
36		$this->calendar = new ArabicCalendar;
37		parent::__construct($date);
38	}
39
40	/** {@inheritdoc} */
41	public static function calendarName() {
42		return /* I18N: The Arabic/Hijri calendar */
43			I18N::translate('Hijri');
44	}
45
46	/** {@inheritdoc} */
47	public static function monthNameNominativeCase($month_number, $leap_year) {
48		static $translated_month_names;
49
50		if ($translated_month_names === null) {
51			$translated_month_names = array(
52				0  => '',
53				1  => /* I18N: http://en.wikipedia.org/wiki/Muharram                     */ I18N::translateContext('NOMINATIVE', 'Muharram'),
54				2  => /* I18N: http://en.wikipedia.org/wiki/Safar                        */ I18N::translateContext('NOMINATIVE', 'Safar'),
55				3  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-awwal             */ I18N::translateContext('NOMINATIVE', 'Rabi’ al-awwal'),
56				4  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-thani             */ I18N::translateContext('NOMINATIVE', 'Rabi’ al-thani'),
57				5  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-awwal              */ I18N::translateContext('NOMINATIVE', 'Jumada al-awwal'),
58				6  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-thani              */ I18N::translateContext('NOMINATIVE', 'Jumada al-thani'),
59				7  => /* I18N: http://en.wikipedia.org/wiki/Rajab                        */ I18N::translateContext('NOMINATIVE', 'Rajab'),
60				8  => /* I18N: http://en.wikipedia.org/wiki/Sha%27aban                   */ I18N::translateContext('NOMINATIVE', 'Sha’aban'),
61				9  => /* I18N: http://en.wikipedia.org/wiki/Ramadan_%28calendar_month%29 */ I18N::translateContext('NOMINATIVE', 'Ramadan'),
62				10 => /* I18N: http://en.wikipedia.org/wiki/Shawwal                      */ I18N::translateContext('NOMINATIVE', 'Shawwal'),
63				11 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Qi%27dah              */ I18N::translateContext('NOMINATIVE', 'Dhu al-Qi’dah'),
64				12 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Hijjah                */ I18N::translateContext('NOMINATIVE', 'Dhu al-Hijjah'),
65			);
66		}
67
68		return $translated_month_names[$month_number];
69	}
70
71	/** {@inheritdoc} */
72	static function monthNameGenitiveCase($month_number, $leap_year) {
73		static $translated_month_names;
74
75		if ($translated_month_names === null) {
76			$translated_month_names = array(
77				0  => '',
78				1  => /* I18N: http://en.wikipedia.org/wiki/Muharram                     */ I18N::translateContext('GENITIVE', 'Muharram'),
79				2  => /* I18N: http://en.wikipedia.org/wiki/Safar                        */ I18N::translateContext('GENITIVE', 'Safar'),
80				3  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-awwal             */ I18N::translateContext('GENITIVE', 'Rabi’ al-awwal'),
81				4  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-thani             */ I18N::translateContext('GENITIVE', 'Rabi’ al-thani'),
82				5  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-awwal              */ I18N::translateContext('GENITIVE', 'Jumada al-awwal'),
83				6  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-thani              */ I18N::translateContext('GENITIVE', 'Jumada al-thani'),
84				7  => /* I18N: http://en.wikipedia.org/wiki/Rajab                        */ I18N::translateContext('GENITIVE', 'Rajab'),
85				8  => /* I18N: http://en.wikipedia.org/wiki/Sha%27aban                   */ I18N::translateContext('GENITIVE', 'Sha’aban'),
86				9  => /* I18N: http://en.wikipedia.org/wiki/Ramadan_%28calendar_month%29 */ I18N::translateContext('GENITIVE', 'Ramadan'),
87				10 => /* I18N: http://en.wikipedia.org/wiki/Shawwal                      */ I18N::translateContext('GENITIVE', 'Shawwal'),
88				11 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Qi%27dah              */ I18N::translateContext('GENITIVE', 'Dhu al-Qi’dah'),
89				12 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Hijjah                */ I18N::translateContext('GENITIVE', 'Dhu al-Hijjah'),
90			);
91		}
92
93		return $translated_month_names[$month_number];
94	}
95
96	/** {@inheritdoc} */
97	static function monthNameLocativeCase($month_number, $leap_year) {
98		static $translated_month_names;
99
100		if ($translated_month_names === null) {
101			$translated_month_names = array(
102				0  => '',
103				1  => /* I18N: http://en.wikipedia.org/wiki/Muharram                     */ I18N::translateContext('LOCATIVE', 'Muharram'),
104				2  => /* I18N: http://en.wikipedia.org/wiki/Safar                        */ I18N::translateContext('LOCATIVE', 'Safar'),
105				3  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-awwal             */ I18N::translateContext('LOCATIVE', 'Rabi’ al-awwal'),
106				4  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-thani             */ I18N::translateContext('LOCATIVE', 'Rabi’ al-thani'),
107				5  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-awwal              */ I18N::translateContext('LOCATIVE', 'Jumada al-awwal'),
108				6  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-thani              */ I18N::translateContext('LOCATIVE', 'Jumada al-thani'),
109				7  => /* I18N: http://en.wikipedia.org/wiki/Rajab                        */ I18N::translateContext('LOCATIVE', 'Rajab'),
110				8  => /* I18N: http://en.wikipedia.org/wiki/Sha%27aban                   */ I18N::translateContext('LOCATIVE', 'Sha’aban'),
111				9  => /* I18N: http://en.wikipedia.org/wiki/Ramadan_%28calendar_month%29 */ I18N::translateContext('LOCATIVE', 'Ramadan'),
112				10 => /* I18N: http://en.wikipedia.org/wiki/Shawwal                      */ I18N::translateContext('LOCATIVE', 'Shawwal'),
113				11 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Qi%27dah              */ I18N::translateContext('LOCATIVE', 'Dhu al-Qi’dah'),
114				12 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Hijjah                */ I18N::translateContext('LOCATIVE', 'Dhu al-Hijjah'),
115			);
116		}
117
118		return $translated_month_names[$month_number];
119	}
120
121	/** {@inheritdoc} */
122	static function monthNameInstrumentalCase($month_number, $leap_year) {
123		static $translated_month_names;
124
125		if ($translated_month_names === null) {
126			$translated_month_names = array(
127				0  => '',
128				1  => /* I18N: http://en.wikipedia.org/wiki/Muharram                     */ I18N::translateContext('INSTRUMENTAL', 'Muharram'),
129				2  => /* I18N: http://en.wikipedia.org/wiki/Safar                        */ I18N::translateContext('INSTRUMENTAL', 'Safar'),
130				3  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-awwal             */ I18N::translateContext('INSTRUMENTAL', 'Rabi’ al-awwal'),
131				4  => /* I18N: http://en.wikipedia.org/wiki/Rabi%27_al-thani             */ I18N::translateContext('INSTRUMENTAL', 'Rabi’ al-thani'),
132				5  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-awwal              */ I18N::translateContext('INSTRUMENTAL', 'Jumada al-awwal'),
133				6  => /* I18N: http://en.wikipedia.org/wiki/Jumada_al-thani              */ I18N::translateContext('INSTRUMENTAL', 'Jumada al-thani'),
134				7  => /* I18N: http://en.wikipedia.org/wiki/Rajab                        */ I18N::translateContext('INSTRUMENTAL', 'Rajab'),
135				8  => /* I18N: http://en.wikipedia.org/wiki/Sha%27aban                   */ I18N::translateContext('INSTRUMENTAL', 'Sha’aban'),
136				9  => /* I18N: http://en.wikipedia.org/wiki/Ramadan_%28calendar_month%29 */ I18N::translateContext('INSTRUMENTAL', 'Ramadan'),
137				10 => /* I18N: http://en.wikipedia.org/wiki/Shawwal                      */ I18N::translateContext('INSTRUMENTAL', 'Shawwal'),
138				11 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Qi%27dah              */ I18N::translateContext('INSTRUMENTAL', 'Dhu al-Qi’dah'),
139				12 => /* I18N: http://en.wikipedia.org/wiki/Dhu_al-Hijjah                */ I18N::translateContext('INSTRUMENTAL', 'Dhu al-Hijjah'),
140			);
141		}
142
143		return $translated_month_names[$month_number];
144	}
145
146	/** {@inheritdoc} */
147	static function monthNameAbbreviated($month_number, $leap_year) {
148		return self::monthNameNominativeCase($month_number, $leap_year);
149	}
150}
151