24.06.2012 23:00
Нужно из нее вытащить отдельно год, отдельно месяц и отдельно все остальное.
Какой вариант наиболее оптимальный (с точки зрения быстродействия и что б говнокодом не было)?
Я пока только такой вижу:
С помощью explode() разбивать эту строку. сначала с разделителем точка, потом пробел, потом двоеточие. В итоге все будет по отдельным ячейкам разных массивов.
Напишите свой, более правильный и быстрый алгоритм.
Спустя 8 минут, 59 секунд (25.06.2012 - 00:18) Игорь_Vasinsky написал(а):
я бы тож так и делал.
$date = "24.06.2012 23:00";
$arr = explode(" ", $date);
$dateOnly = explode(".", $arr[0]);
$time = $arr[1];
$year = $dateOnly[2];
$mount = $dateOnly[1];
$day = $dateOnly[0];
Спустя 49 минут, 9 секунд (25.06.2012 - 01:08) Invis1ble написал(а):
$data = preg_split('#[.: ]#', '24.06.2012 23:00');
Спустя 8 часов, 8 минут, 28 секунд (25.06.2012 - 09:16) Placido написал(а):
Для работы с датой и временем есть целый класс DateTime (PHP 5 >= 5.2.0)
Если формат нестандартный, то так (PHP 5 >= 5.3.0):
$str = '24.06.2012 23:00';
$datetime = new DateTime($str);
echo 'Год: ' . $datetime->format('Y') . '<br/>';
echo 'Месяц: ' . $datetime->format('m') . '<br/>';
echo 'День: ' . $datetime->format('d') . '<br/>';
echo 'Время: ' . $datetime->format('H:i') . '<br/>';
//Год: 2012
//Месяц: 06
//День: 24
//Время: 23:00
Если формат нестандартный, то так (PHP 5 >= 5.3.0):
$str = '06.24.2012 {23-00}';
$datetime = DateTime::createFromFormat('m.d.Y {H-i}', $str);
echo 'Год: ' . $datetime->format('Y') . '<br/>';
echo 'Месяц: ' . $datetime->format('m') . '<br/>';
echo 'День: ' . $datetime->format('d') . '<br/>';
echo 'Время: ' . $datetime->format('H:i') . '<br/>';
//Год: 2012
//Месяц: 06
//День: 24
//Время: 23:00
Спустя 53 минуты, 38 секунд (25.06.2012 - 10:10) iVasya написал(а):
А может, есть готовая функция для перевода строки с датой в timestamp?
Мне это разбиение строки нужно только для того, что бы на выходе метку timestamp получить:)
Или только вручную, разбивать строку, приводить к int, переводить все в секунды и складывать?
Если нет, то придется возиться с тем, что в месяцах разное кол-во дней, да и год бывает высокосным.
Мне это разбиение строки нужно только для того, что бы на выходе метку timestamp получить:)
Или только вручную, разбивать строку, приводить к int, переводить все в секунды и складывать?
Если нет, то придется возиться с тем, что в месяцах разное кол-во дней, да и год бывает высокосным.
Спустя 37 минут, 11 секунд (25.06.2012 - 10:47) Placido написал(а):
Откройте для себя класс DateTime.
echo DateTime::createFromFormat('d.m.Y H:i', '24.06.2012 23:00')->getTimestamp();
//1340568000
//Процедурный стиль:
echo date_timestamp_get(date_create_from_format('d.m.Y H:i', '24.06.2012 23:00'));
//1340568000
Спустя 13 минут, 2 секунды (25.06.2012 - 11:00) iVasya написал(а):
А если мне сервер говорит
Call to undefined method DateTime::createFromFormat()
и
Call to undefined function date_timestamp_get()
Это проблемы с настройками php.ini, или из-за чего это может быть?
Call to undefined method DateTime::createFromFormat()
и
Call to undefined function date_timestamp_get()
Это проблемы с настройками php.ini, или из-за чего это может быть?
Спустя 3 минуты, 28 секунд (25.06.2012 - 11:03) Placido написал(а):
Из-за того, что версия PHP < 5.3.
Спустя 11 минут, 1 секунда (25.06.2012 - 11:14) iVasya написал(а):
Ок, спасибо 
И последнее, не совсем в тему, но все же.
Какой из способов, процедурный или метод классы DateTime более быстрый, или корректный, если так можно сказать? Или они абсолютно идентичны?
Кстати, в мануале пишут, что этот класс для (PHP 5 >= 5.2.0) (http://www.php.net/manual/ru/class.datetime.php)
а у меня 5.2.9
А нет, пардон, увидел)
А для версии < 5.3 аналогов нету, не знаете?

И последнее, не совсем в тему, но все же.
Какой из способов, процедурный или метод классы DateTime более быстрый, или корректный, если так можно сказать? Или они абсолютно идентичны?
Кстати, в мануале пишут, что этот класс для (PHP 5 >= 5.2.0) (http://www.php.net/manual/ru/class.datetime.php)
а у меня 5.2.9
А нет, пардон, увидел)
А для версии < 5.3 аналогов нету, не знаете?
Спустя 15 минут, 16 секунд (25.06.2012 - 11:30) Placido написал(а):
Оба способа корректные, это вопрос личных предпочтений. Мне лично ООП-стиль кажется более наглядным.
Спустя 57 минут, 2 секунды (25.06.2012 - 12:27) killer8080 написал(а):
Цитата (iVasya @ 25.06.2012 - 10:10) |
Мне это разбиение строки нужно только для того, что бы на выходе метку timestamp получить:) |
для старых версий PHP можно так
$str = '24.06.2012 23:00';
$time = strtotime(preg_replace('#^(\d+)\.(\d+)\.(\d+) (\d+:\d+(:\d+)?)$#', '\\3-\\2-\\1 \\4', $str));
Спустя 44 минуты, 14 секунд killer8080 написал(а):
или так
$time = strtotime(str_replace('.', '-', $str));
Спустя 4 часа, 59 минут, 9 секунд (25.06.2012 - 17:26) Invis1ble написал(а):
killer8080
str_replace там вроде не нужен, и так должно работать
str_replace там вроде не нужен, и так должно работать
$timestamp = strtotime('24.06.2012 23:00');
Спустя 15 часов, 39 минут, 21 секунда (26.06.2012 - 09:05) killer8080 написал(а):
Invis1ble
точно, работает
точно, работает
