strtotime, а затем преобразовать в UNIX? - PullRequest
0 голосов
/ 09 января 2012

EDIT

Согласно приведенному ниже комментарию, я попытаюсь разбить / объединить / преобразовать строку до реализации mktime ...

$date1 = explode("T",'2005-03-27T00:00:00');
$date2 = explode("-", $date1[0]);
$try = mktime($time1,$time2,0,$date2[1],$date[2],$date[3]);
print $try; 

// Распечатывается: 951793200

Оригинальный вопрос:

Я унаследовал базу данных и очень хотел бы преобразовать причудливый способ хранения данных во что-то более дружественное к MySQL ...

А пока я получаю текст строку (да ... текст) ... которую я хотел бы преобразовать в unixtime ...

Итак, я получу строку, которая выглядит следующим образом:

2005-03-27T00: 00: 00 03:00

Я хотел бы преобразовать его в:

1111885200

Даты и времена всегда меня портят ... Я сделал несколько вещей, используя strtotime и mktime, но не могу отформатировать его так, как я хочу.

Ответы [ 4 ]

0 голосов
/ 09 января 2012

Если деталь T00: 00: 00 бесполезна, просто удалите ее и используйте strtotime():

<?php
$date = '2005-03-27T00:00:00 03:00 AM';
$timestamp = strtotime(preg_replace('!T[^ ]+!', '', $date));

var_dump(date('d/m/Y H:i:s', $timestamp));
?>

Это печатает:

string(19) "27/03/2005 03:00:00"
0 голосов
/ 09 января 2012

Ну, вот как бы я это сделал.

$ex = '2005-03-27T00:00:00 03:00 AM';
$format = '%Y-%m-%dT00:00:00 %H:%M %p';
$strf = strptime($ex, $format);
$date_str = $strf['tm_mon'] + 1 . '/' . $strf['tm_mday'] . '/' . ($strf['tm_year'] + 1900) . ' ' . $strf['tm_hour'] . ':' . $strf['tm_min'] . ':00';
echo $date_str;
echo "\n";
echo strtotime($date_str);
echo "\n";
echo date('m-d-Y H:i:s', 1111885200);

Но желаемый результат, по-видимому, неверен на основании даты публикации.

ВЫХОД

3/27/2005 3:0:00
1111921200
03-26-2005 17:00:00
0 голосов
/ 09 января 2012

Итак, я не фанат регулярных выражений, за исключением случаев, когда это абсолютно необходимо, но они могут быть необходимы здесь, чтобы выбрать часть часового пояса.

preg_match("/(\d{4})-(\d{2})-(\d{2})(T\d{2}:\d{2}:\d{2}) (\d{2}:\d{2}) (AM|PM)/", '2005-03-27T00:00:00 03:00 AM',$matches);

Даст вам $ совпадений, которые выглядят примерно так:

Array
(
    [0] => 2005-03-27T00:00:00 03:00 AM
    [1] => 2005
    [2] => 03
    [3] => 27
    [4] => T00:00:00
    [5] => 03:00
    [6] => AM
)

Я бы подал эти кусочки в DateTime объект.Затем вы можете вывести его в любой формат по вашему желанию.Вам также может понадобиться изменить это регулярное выражение, чтобы оно могло обрабатывать все ваши даты.

0 голосов
/ 09 января 2012

Вы могли бы написать скрипт конвертера litte, который сделает эту задачу за вас.

Пожалуйста, проверьте дополнительные параметры mktime

Вы можете попытаться разбить вашу строку на час / минуту / секунду / месяц / день / год и поместить ее в mktime. Тогда mktime даст вам метку времени Unix для этого.

...