2010-11-02 4 views
3

может ли кто-нибудь получить код для скрытия метки времени из строки. Я использовал этот код, чтобы получить дату из строки предположимудалить временную метку из строки

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 

$date = strtotime($date_string); 
$date = date('m/d/y', $date); 

Но из положить я получаю что-то вроде этого

1/1/70 

Пожалуйста, предложите лучший способ, которым я мог бы реализовать для это работать Я хочу, чтобы показать, как

02/06/2011 
+0

Срочно date_string? Почему ты не разделяешь это? – nerkn

+0

Было бы хорошо, если бы вы добавили первую строку. – Shikiryu

+0

и было бы полезно посмотреть, как вы выводите окончательное значение $ date – heximal

ответ

4

Если дата вы ищете уже в строке, и все, что вы хотите сделать, это удалить диапазон времени, вам не нужно никаких манипуляций даты. Просто удалите все после пробела (при условии, что формат date_string остается согласованным).

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date = explode(" ",$date_string); 
echo $date[0]; 

Или еще проще (но непроверенные)

echo strtok($date_string," "); //http://codepad.org/Or1mpYOp 

PHP.NET:strtok

PHP.NET:explode

+1

Вы зарабатываете строку с:' echo $ date [0]; 'Я думаю, что это лучшее решение здесь. Конечно, это зависит от того, откуда приходит '$ date_string', и если он может контролировать свой формат. – Shikiryu

+1

oh и: http://codepad.org/KAec6ehi для OP – Shikiryu

+0

Отлично. Спасибо за ссылку! Отмеченный .... –

3
$date = strtotime($date_string); 
$date = getdate($date); 
$date = $date['mon'] . '/' . $date['mday'] . '/' . $date['year'] 
+0

возвращает дату как '1/1/1970' –

+0

Это решение отлично подходит для меня. –

+0

Реализовано это потому, что я использовал настоящую строку даты в отличие от строки диапазона дат, заданной в вопросе –

1

Если 02/06/2011 11:00 am - 2:00 pm - это то, что отображается, вы, очевидно, показываете $date_string, а не $date, потому что strtotime('02/06/2011 11:00 am - 2:00 pm'); возвращает логическое значение false, которое date('m/d/y', $date) будет конвертировать в 01/01/1970.

Try что-то вроде этого

$date_string = "02/06/2011 11:00 am - 2:00 pm"; 
$date_exploded = explode('-',$date_string); 

$date = strtotime($date_exploded[0]); 
$date = date('m/d/y', $date); 
echo $date; 
+0

получение «01/01/70» –

+0

Не знаете, почему. Здесь этот код повторяет «02/06/11' – Mchl

0

Оставляя в стороне тот факт, что что-то происходит очень неправильно в дату разбора, вы должны быть что использование формата даты 00/00/00 [00] довольно неоднозначно - в США даты, написанные так, в формате mm/dd/yy [yy] whi le в Великобритании интерпретируется как dd/mm/yy [yy]. Функция strtotime не использует настройку locale для разработки, которая применяется и всегда принимает первое.

Если бы меня попросили разобрать это, я бы воспользовался preg, чтобы извлечь часть даты. Использование шаблона:

/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})/ 

дает массиву

0=> 02/06/2011 
1=> 02 
2=> 06 
3=> 2011 

Затем используйте для создания указываете ей на timstamp Unix.

Другие подходы включают использование substr для извлечения строки фиксированной длины или использование пространства для получения слов.

0

Если ваша строка уже является датой.

$ date = substr ($ records [$ datetime, 0, 10);

Смежные вопросы