Еще один вопрос - PullRequest
       7

Еще один вопрос

2 голосов
/ 03 марта 2010

У меня сейчас дата в этом формате

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 жалуется на «неверную строку времени»:

$solr_date = date('c', (strtotime($date_from_mysql)); // doesn't work

При отражении $solr_date, указанного выше Z не хватает. Спасибо.

Ответы [ 6 ]

5 голосов
/ 05 марта 2010

Почему бы вам просто не преобразовать его в 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("Y-m-d\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;
    }
2 голосов
/ 16 апреля 2013

просто используйте

gmdate('Y-m-d\TH:i:s\Z', $time);

2 голосов
/ 03 марта 2010

Прежде всего, стоит отметить, что столбцы даты / времени в MySQL не хранятся в каком-либо конкретном строковом формате. При печати они преобразуются в строки, и вы можете выбрать, как их отформатировать.

Если вы хотите использовать чистое решение MySQL, функции, относящиеся к вашей проблеме, включают CONVERT_TZ () для получения времени UTC и DATE_FORMAT () для отображения его по мере необходимости. E.g.:

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('Y-m-d', $ts) . 'T' . date('H:i:s', $ts) . 'Z';
?>
0 голосов
/ 31 января 2013

Вот еще одна альтернатива:

$datetime = new DateTime('2010-01-19 00:00:00');
echo str_replace('+00:00', 'Z', $datetime->format('c'));

Увидеть это в действии

0 голосов
/ 15 августа 2012

Это немного взломать, но у меня работает:

$to = date('c', strtotime($to)).'.000Z';
0 голосов
/ 03 марта 2010

Вот решение PHP:

Разделить строку даты (2010-03-03 10:39:18) на основе аргументов функции mktime.

$solr_date = date('c', mktime($year,$month,$date, $h, $m , $s)); # it will work

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...