Issues (2563)

app/Date/AbstractGregorianJulianDate.php (1 issue)

Labels
Severity
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2025 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Date;
21
22
use Fisharebest\Webtrees\I18N;
23
24
/**
25
 * Common definitions for Gregorian and Julian dates.
26
 */
27
abstract class AbstractGregorianJulianDate extends AbstractCalendarDate
28
{
29
    // Convert GEDCOM month names to month numbers
30
    protected const array MONTH_ABBREVIATIONS = [
0 ignored issues
show
A parse error occurred: Syntax error, unexpected T_STRING, expecting '=' on line 30 at column 26
Loading history...
31
        ''    => 0,
32
        'JAN' => 1,
33
        'FEB' => 2,
34
        'MAR' => 3,
35
        'APR' => 4,
36
        'MAY' => 5,
37
        'JUN' => 6,
38
        'JUL' => 7,
39
        'AUG' => 8,
40
        'SEP' => 9,
41
        'OCT' => 10,
42
        'NOV' => 11,
43
        'DEC' => 12,
44
    ];
45
46
    protected const array MONTH_TO_NUMBER = [
47
        'JAN' => 1,
48
        'FEB' => 2,
49
        'MAR' => 3,
50
        'APR' => 4,
51
        'MAY' => 5,
52
        'JUN' => 6,
53
        'JUL' => 7,
54
        'AUG' => 8,
55
        'SEP' => 9,
56
        'OCT' => 10,
57
        'NOV' => 11,
58
        'DEC' => 12,
59
    ];
60
61
    protected const array NUMBER_TO_MONTH = [
62
        1  => 'JAN',
63
        2  => 'FEB',
64
        3  => 'MAR',
65
        4  => 'APR',
66
        5  => 'MAY',
67
        6  => 'JUN',
68
        7  => 'JUL',
69
        8  => 'AUG',
70
        9  => 'SEP',
71
        10 => 'OCT',
72
        11 => 'NOV',
73
        12 => 'DEC',
74
    ];
75
76
    /**
77
     * Full month name in nominative case.
78
     *
79
     * We put these in the base class, to save duplicating it in the Julian and Gregorian calendars.
80
     *
81
     * @param int  $month
82
     * @param bool $leap_year Some calendars use leap months
83
     *
84
     * @return string
85
     */
86
    protected function monthNameNominativeCase(int $month, bool $leap_year): string
87
    {
88
        static $translated_month_names;
89
90
        if ($translated_month_names === null) {
91
            $translated_month_names = [
92
                0  => '',
93
                1  => I18N::translateContext('NOMINATIVE', 'January'),
94
                2  => I18N::translateContext('NOMINATIVE', 'February'),
95
                3  => I18N::translateContext('NOMINATIVE', 'March'),
96
                4  => I18N::translateContext('NOMINATIVE', 'April'),
97
                5  => I18N::translateContext('NOMINATIVE', 'May'),
98
                6  => I18N::translateContext('NOMINATIVE', 'June'),
99
                7  => I18N::translateContext('NOMINATIVE', 'July'),
100
                8  => I18N::translateContext('NOMINATIVE', 'August'),
101
                9  => I18N::translateContext('NOMINATIVE', 'September'),
102
                10 => I18N::translateContext('NOMINATIVE', 'October'),
103
                11 => I18N::translateContext('NOMINATIVE', 'November'),
104
                12 => I18N::translateContext('NOMINATIVE', 'December'),
105
            ];
106
        }
107
108
        return $translated_month_names[$month];
109
    }
110
111
    /**
112
     * Full month name in genitive case.
113
     *
114
     * We put these in the base class, to save duplicating it in the Julian and Gregorian calendars.
115
     *
116
     * @param int  $month
117
     * @param bool $leap_year Some calendars use leap months
118
     *
119
     * @return string
120
     */
121
    protected function monthNameGenitiveCase(int $month, bool $leap_year): string
122
    {
123
        static $translated_month_names;
124
125
        if ($translated_month_names === null) {
126
            $translated_month_names = [
127
                0  => '',
128
                1  => I18N::translateContext('GENITIVE', 'January'),
129
                2  => I18N::translateContext('GENITIVE', 'February'),
130
                3  => I18N::translateContext('GENITIVE', 'March'),
131
                4  => I18N::translateContext('GENITIVE', 'April'),
132
                5  => I18N::translateContext('GENITIVE', 'May'),
133
                6  => I18N::translateContext('GENITIVE', 'June'),
134
                7  => I18N::translateContext('GENITIVE', 'July'),
135
                8  => I18N::translateContext('GENITIVE', 'August'),
136
                9  => I18N::translateContext('GENITIVE', 'September'),
137
                10 => I18N::translateContext('GENITIVE', 'October'),
138
                11 => I18N::translateContext('GENITIVE', 'November'),
139
                12 => I18N::translateContext('GENITIVE', 'December'),
140
            ];
141
        }
142
143
        return $translated_month_names[$month];
144
    }
145
146
    /**
147
     * Full month name in locative case.
148
     *
149
     * We put these in the base class, to save duplicating it in the Julian and Gregorian calendars.
150
     *
151
     * @param int  $month
152
     * @param bool $leap_year Some calendars use leap months
153
     *
154
     * @return string
155
     */
156
    protected function monthNameLocativeCase(int $month, bool $leap_year): string
157
    {
158
        static $translated_month_names;
159
160
        if ($translated_month_names === null) {
161
            $translated_month_names = [
162
                0  => '',
163
                1  => I18N::translateContext('LOCATIVE', 'January'),
164
                2  => I18N::translateContext('LOCATIVE', 'February'),
165
                3  => I18N::translateContext('LOCATIVE', 'March'),
166
                4  => I18N::translateContext('LOCATIVE', 'April'),
167
                5  => I18N::translateContext('LOCATIVE', 'May'),
168
                6  => I18N::translateContext('LOCATIVE', 'June'),
169
                7  => I18N::translateContext('LOCATIVE', 'July'),
170
                8  => I18N::translateContext('LOCATIVE', 'August'),
171
                9  => I18N::translateContext('LOCATIVE', 'September'),
172
                10 => I18N::translateContext('LOCATIVE', 'October'),
173
                11 => I18N::translateContext('LOCATIVE', 'November'),
174
                12 => I18N::translateContext('LOCATIVE', 'December'),
175
            ];
176
        }
177
178
        return $translated_month_names[$month];
179
    }
180
181
    /**
182
     * Full month name in instrumental case.
183
     *
184
     * We put these in the base class, to save duplicating it in the Julian and Gregorian calendars.
185
     *
186
     * @param int  $month
187
     * @param bool $leap_year Some calendars use leap months
188
     *
189
     * @return string
190
     */
191
    protected function monthNameInstrumentalCase(int $month, bool $leap_year): string
192
    {
193
        static $translated_month_names;
194
195
        if ($translated_month_names === null) {
196
            $translated_month_names = [
197
                0  => '',
198
                1  => I18N::translateContext('INSTRUMENTAL', 'January'),
199
                2  => I18N::translateContext('INSTRUMENTAL', 'February'),
200
                3  => I18N::translateContext('INSTRUMENTAL', 'March'),
201
                4  => I18N::translateContext('INSTRUMENTAL', 'April'),
202
                5  => I18N::translateContext('INSTRUMENTAL', 'May'),
203
                6  => I18N::translateContext('INSTRUMENTAL', 'June'),
204
                7  => I18N::translateContext('INSTRUMENTAL', 'July'),
205
                8  => I18N::translateContext('INSTRUMENTAL', 'August'),
206
                9  => I18N::translateContext('INSTRUMENTAL', 'September'),
207
                10 => I18N::translateContext('INSTRUMENTAL', 'October'),
208
                11 => I18N::translateContext('INSTRUMENTAL', 'November'),
209
                12 => I18N::translateContext('INSTRUMENTAL', 'December'),
210
            ];
211
        }
212
213
        return $translated_month_names[$month];
214
    }
215
216
    /**
217
     * Abbreviated month name
218
     *
219
     * @param int  $month
220
     * @param bool $leap_year Some calendars use leap months
221
     *
222
     * @return string
223
     */
224
    protected function monthNameAbbreviated(int $month, bool $leap_year): string
225
    {
226
        static $translated_month_names;
227
228
        if ($translated_month_names === null) {
229
            $translated_month_names = [
230
                0  => '',
231
                1  => I18N::translateContext('Abbreviation for January', 'Jan'),
232
                2  => I18N::translateContext('Abbreviation for February', 'Feb'),
233
                3  => I18N::translateContext('Abbreviation for March', 'Mar'),
234
                4  => I18N::translateContext('Abbreviation for April', 'Apr'),
235
                5  => I18N::translateContext('Abbreviation for May', 'May'),
236
                6  => I18N::translateContext('Abbreviation for June', 'Jun'),
237
                7  => I18N::translateContext('Abbreviation for July', 'Jul'),
238
                8  => I18N::translateContext('Abbreviation for August', 'Aug'),
239
                9  => I18N::translateContext('Abbreviation for September', 'Sep'),
240
                10 => I18N::translateContext('Abbreviation for October', 'Oct'),
241
                11 => I18N::translateContext('Abbreviation for November', 'Nov'),
242
                12 => I18N::translateContext('Abbreviation for December', 'Dec'),
243
            ];
244
        }
245
246
        return $translated_month_names[$month];
247
    }
248
}
249