private function parseToTimeValueForGregorianCalendarModel(DITime $dataItem) { if ($dataItem->getYear() > 0) { $xsdvalue = str_pad($dataItem->getYear(), 4, "0", STR_PAD_LEFT); } else { $xsdvalue = '-' . str_pad(1 - $dataItem->getYear(), 4, "0", STR_PAD_LEFT); } $xsdtype = 'http://www.w3.org/2001/XMLSchema#gYear'; if ($dataItem->getPrecision() >= DITime::PREC_YM) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#gYearMonth'; $xsdvalue .= '-' . str_pad($dataItem->getMonth(), 2, "0", STR_PAD_LEFT); if ($dataItem->getPrecision() >= DITime::PREC_YMD) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#date'; $xsdvalue .= '-' . str_pad($dataItem->getDay(), 2, "0", STR_PAD_LEFT); if ($dataItem->getPrecision() == DITime::PREC_YMDT) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#dateTime'; $xsdvalue .= 'T' . sprintf("%02d", $dataItem->getHour()) . ':' . sprintf("%02d", $dataItem->getMinute()) . ':' . sprintf("%02d", $dataItem->getSecond()); } } } $this->xsdValue = $xsdvalue .= 'Z'; $this->xsdType = $xsdtype; }
/** * Compute a suitable string to display the given date item. * @note MediaWiki's date functions are not applicable for the range of historic dates we support. * * @since 1.6 * * @param SMWDITime $dataitem * * @return string * @todo Internationalize the CE and BCE strings. */ public function getCaptionFromDataitem(SMWDITime $dataitem) { /** * @var SMWLanguage $smwgContLang */ global $smwgContLang; if ($dataitem->getYear() > 0) { $cestring = ''; $result = number_format($dataitem->getYear(), 0, '.', '') . ($cestring ? ' ' . $cestring : ''); } else { $bcestring = 'BC'; $result = number_format(-$dataitem->getYear(), 0, '.', '') . ($bcestring ? ' ' . $bcestring : ''); } if ($dataitem->getPrecision() >= SMWDITime::PREC_YM) { $result = $smwgContLang->getMonthLabel($dataitem->getMonth()) . " " . $result; } if ($dataitem->getPrecision() >= SMWDITime::PREC_YMD) { $result = $dataitem->getDay() . " " . $result; } if ($dataitem->getPrecision() >= SMWDITime::PREC_YMDT) { $result .= " " . $this->getTimeString(); } return $result; }
private function parseToTimeValueForGregorianCalendarModel(DITime $dataItem) { if ($dataItem->getYear() > 0) { $xsdvalue = str_pad($dataItem->getYear(), 4, "0", STR_PAD_LEFT); } else { $xsdvalue = '-' . str_pad(1 - $dataItem->getYear(), 4, "0", STR_PAD_LEFT); } $xsdtype = 'http://www.w3.org/2001/XMLSchema#gYear'; if ($dataItem->getPrecision() >= DITime::PREC_YM) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#gYearMonth'; $xsdvalue .= '-' . str_pad($dataItem->getMonth(), 2, "0", STR_PAD_LEFT); if ($dataItem->getPrecision() >= DITime::PREC_YMD) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#date'; $xsdvalue .= '-' . str_pad($dataItem->getDay(), 2, "0", STR_PAD_LEFT); if ($dataItem->getPrecision() == DITime::PREC_YMDT) { $xsdtype = 'http://www.w3.org/2001/XMLSchema#dateTime'; $xsdvalue .= 'T' . sprintf("%02d", $dataItem->getHour()) . ':' . sprintf("%02d", $dataItem->getMinute()) . ':' . sprintf("%02d", $dataItem->getSecond()); } // https://www.w3.org/TR/2005/NOTE-timezone-20051013/ // "Time zone identification in the date and time types relies // entirely on time zone offset from UTC." // Zone offset Z indicates UTC $xsdvalue .= 'Z'; } } $this->xsdValue = $xsdvalue; $this->xsdType = $xsdtype; }
/** * @private * * @since 2.4 * * @param DITime|null $dataItem * * @return string */ public function getLocalizedFormat(DITime $dataItem = null) { if ($dataItem === null) { return ''; } if ($dataItem->getYear() < DITime::PREHISTORY) { return $this->getISO8601Date(); } $outputFormat = $this->dataValue->getOutputFormat(); $formatFlag = IntlTimeFormatter::LOCL_DEFAULT; if (strpos($outputFormat, 'TZ') !== false) { $formatFlag = IntlTimeFormatter::LOCL_TIMEZONE; $outputFormat = str_replace('#TZ', '', $outputFormat); } if (($language = Localizer::getInstance()->getLanguageCodeFrom($outputFormat)) === false) { $language = $this->dataValue->getOptionBy(DataValue::OPT_USER_LANGUAGE); } $language = Localizer::getInstance()->getLanguage($language); $intlTimeFormatter = new IntlTimeFormatter($dataItem, $language); // Avoid an exception on "DateTime::__construct(): Failed to parse time // string (2147483647-01-01 00:00:0.0000000) at position 17 (0): Double // time specification" for an annotation like [[Date::Jan 10000000000]] try { $localizedFormat = $intlTimeFormatter->getLocalizedFormat($formatFlag) . $this->hintCalendarModel($dataItem); } catch (\Exception $e) { $localizedFormat = $this->getISO8601Date(); } return $localizedFormat; }