1a25f0a04SGreg Roach<?php 2*dd04c183SGreg Roachnamespace Fisharebest\Webtrees; 3a25f0a04SGreg Roach 4a25f0a04SGreg Roach/** 5a25f0a04SGreg Roach * webtrees: online genealogy 6a25f0a04SGreg Roach * Copyright (C) 2015 webtrees development team 7a25f0a04SGreg Roach * This program is free software: you can redistribute it and/or modify 8a25f0a04SGreg Roach * it under the terms of the GNU General Public License as published by 9a25f0a04SGreg Roach * the Free Software Foundation, either version 3 of the License, or 10a25f0a04SGreg Roach * (at your option) any later version. 11a25f0a04SGreg Roach * This program is distributed in the hope that it will be useful, 12a25f0a04SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 13a25f0a04SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14a25f0a04SGreg Roach * GNU General Public License for more details. 15a25f0a04SGreg Roach * You should have received a copy of the GNU General Public License 16a25f0a04SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>. 17a25f0a04SGreg Roach */ 18a25f0a04SGreg Roach 19a25f0a04SGreg Roachuse Fisharebest\ExtCalendar\JulianCalendar; 20a25f0a04SGreg Roach 21a25f0a04SGreg Roach/** 22a25f0a04SGreg Roach * Class JulianDate - Definitions for the Julian Proleptic calendar 23a25f0a04SGreg Roach * (Proleptic means we extend it backwards, prior to its introduction in 46BC) 24a25f0a04SGreg Roach */ 25a25f0a04SGreg Roachclass JulianDate extends CalendarDate { 26a25f0a04SGreg Roach const CALENDAR_ESCAPE = '@#DJULIAN@'; 27a25f0a04SGreg Roach 28a25f0a04SGreg Roach /** @var boolean True for dates recorded in new-style/old-style format, e.g. 2 FEB 1743/44 */ 29a25f0a04SGreg Roach private $new_old_style = false; 30a25f0a04SGreg Roach 31a25f0a04SGreg Roach /** {@inheritdoc} */ 32a25f0a04SGreg Roach public function __construct($date) { 33a25f0a04SGreg Roach $this->calendar = new JulianCalendar; 34a25f0a04SGreg Roach parent::__construct($date); 35a25f0a04SGreg Roach } 36a25f0a04SGreg Roach 37a25f0a04SGreg Roach /** {@inheritdoc} */ 38a25f0a04SGreg Roach public static function calendarName() { 39a25f0a04SGreg Roach return /* I18N: The julian calendar */ 40a25f0a04SGreg Roach I18N::translate('Julian'); 41a25f0a04SGreg Roach } 42a25f0a04SGreg Roach 43a25f0a04SGreg Roach /** {@inheritdoc} */ 44a25f0a04SGreg Roach protected static function nextYear($year) { 45a25f0a04SGreg Roach if ($year == -1) { 46a25f0a04SGreg Roach return 1; 47a25f0a04SGreg Roach } else { 48a25f0a04SGreg Roach return $year + 1; 49a25f0a04SGreg Roach } 50a25f0a04SGreg Roach } 51a25f0a04SGreg Roach 52a25f0a04SGreg Roach /** 53a25f0a04SGreg Roach * Process new-style/old-style years and years BC 54a25f0a04SGreg Roach * 55a25f0a04SGreg Roach * {@inheritdoc} 56a25f0a04SGreg Roach */ 57a25f0a04SGreg Roach protected function extractYear($year) { 58a25f0a04SGreg Roach if (preg_match('/^(\d\d\d\d)\/\d{1,4}$/', $year, $match)) { 59a25f0a04SGreg Roach // Assume the first year is correct 60a25f0a04SGreg Roach $this->new_old_style = true; 61a25f0a04SGreg Roach 62a25f0a04SGreg Roach return $match[1] + 1; 63a25f0a04SGreg Roach } else if (preg_match('/^(\d+) B\.C\.$/', $year, $match)) { 64a25f0a04SGreg Roach return -$match[1]; 65a25f0a04SGreg Roach } else { 66a25f0a04SGreg Roach return (int) $year; 67a25f0a04SGreg Roach } 68a25f0a04SGreg Roach } 69a25f0a04SGreg Roach 70a25f0a04SGreg Roach /** {@inheritdoc} */ 71a25f0a04SGreg Roach protected function formatLongYear() { 72a25f0a04SGreg Roach if ($this->y < 0) { 73a25f0a04SGreg Roach return /* I18N: BCE=Before the Common Era, for Julian years < 0. See http://en.wikipedia.org/wiki/Common_Era */ 74a25f0a04SGreg Roach I18N::translate('%s BCE', I18N::digits(-$this->y)); 75a25f0a04SGreg Roach } else { 76a25f0a04SGreg Roach if ($this->new_old_style) { 77a25f0a04SGreg Roach return I18N::translate('%s CE', I18N::digits(sprintf('%d/%02d', $this->y - 1, $this->y % 100))); 78a25f0a04SGreg Roach } else { 79a25f0a04SGreg Roach return /* I18N: CE=Common Era, for Julian years > 0. See http://en.wikipedia.org/wiki/Common_Era */ 80a25f0a04SGreg Roach I18N::translate('%s CE', I18N::digits($this->y)); 81a25f0a04SGreg Roach } 82a25f0a04SGreg Roach } 83a25f0a04SGreg Roach } 84a25f0a04SGreg Roach 85a25f0a04SGreg Roach /** {@inheritdoc} */ 86a25f0a04SGreg Roach protected function formatGedcomYear() { 87a25f0a04SGreg Roach if ($this->y < 0) { 88a25f0a04SGreg Roach return sprintf('%04d B.C.', -$this->y); 89a25f0a04SGreg Roach } else { 90a25f0a04SGreg Roach if ($this->new_old_style) { 91a25f0a04SGreg Roach return sprintf('%04d/%02d', $this->y - 1, $this->y % 100); 92a25f0a04SGreg Roach } else { 93a25f0a04SGreg Roach return sprintf('%04d', $this->y); 94a25f0a04SGreg Roach } 95a25f0a04SGreg Roach } 96a25f0a04SGreg Roach } 97a25f0a04SGreg Roach} 98