В настоящее время у меня есть дата в этом формате
2010-03-03 10:39:18
который является полем TIMESTAMP
в MySQL. Мне нужно указать дату в этом формате для поисковой системы Solr:
1995-12-31T23:59:59Z
Вот некоторые тексты со своего сайта о датах:
Solr ожидает, что даты будут в UTC при индексировании. Формат этого поля даты имеет вид 1995-12-31T23: 59: 59Z и является более ограниченной формой канонического представления dateTime http://www.w3.org/TR/xmlschema-2/#dateTime , Конечный «Z» обозначает время UTC и является обязательным. Допустимые дробные секунды: 1995-12-31T23: 59: 59.999Z Все остальные компоненты являются обязательными.
Мне был дан этот код из другого Q здесь на SO, но он не работает. Солр жалуется на «недопустимую строку времени»:
$solr_date = date('c', (strtotime($date_from_mysql)); // doesn't work
При повторении $solr_date,
конечный Z
упомянутый выше, не существует. Благодарю.
Почему бы вам просто не преобразовать его в UTC?
$datetime = "2010-01-19 00:00:00"; echo "Datetime Before: ".$datetime."<br />"; $dttostr = strtotime("2010-01-19 00:00:00"); echo "Datetime After: ".formatToUTC($dttostr)."<br />"; echo "System Timezone: ".date_default_timezone_get()."<br />"; function formatToUTC($passeddt) { // Get the default timezone $default_tz = date_default_timezone_get(); // Set timezone to UTC date_default_timezone_set("UTC"); // convert datetime into UTC $utc_format = date("Ymd\TG:i:s\Z", $passeddt); // Might not need to set back to the default but did just in case date_default_timezone_set($default_tz); return $utc_format; }
Прежде всего, стоит отметить, что столбцы даты / времени в MySQL не хранятся в каком-либо конкретном строковом формате. При печати они преобразуются в строки, и вы можете выбрать способ их форматирования.
Если вы хотите использовать чистое решение MySQL, функции, имеющие отношение к вашей проблеме, включают CONVERT_TZ (), чтобы получить время UTC и DATE_FORMAT (), чтобы отобразить его по мере необходимости. Например:
SELECT CURRENT_TIMESTAMP, CONVERT_TZ(CURRENT_TIMESTAMP, '+01:00', '+00:00'), DATE_FORMAT(CONVERT_TZ(CURRENT_TIMESTAMP, '+01:00', '+00:00'), '%Y-%m-%dT%H:%i:%sZ')
Проблема в том, что вы должны знать свой часовой пояс заранее, так как столбцы TIMESTAMP не позволяют хранить такую информацию. Кроме того, вы можете найти проблемы с летним временем.
О PHP функция date () позволяет комбинировать формат кода, вы не ограничены только одним:
<?php $ts = strtotime($date_from_mysql); $solr_date date('Ym-d', $ts) . 'T' . date('H:i:s', $ts) . 'Z'; ?>
просто используйте
gmdate('Ymd\TH:i:s\Z', $time);
Это немного взломать, но это работает для меня:
$to = date('c', strtotime($to)).'.000Z';
Вот еще одна альтернатива:
$datetime = new DateTime('2010-01-19 00:00:00'); echo str_replace('+00:00', 'Z', $datetime->format('c'));
Смотрите это в действии
Здесь это PHP-решение:
Разделите строку даты (2010-03-03 10:39:18) на основе аргументов функции mktime.
$solr_date = date('c', mktime($year,$month,$date, $h, $m , $s)); # it will work