Другой вопрос dateTime

В настоящее время у меня есть дата в этом формате

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