2016-10-19 5 views
1

Это мой код:Возникли проблемы с помощью str_replace() в PHP

<?php 
$date_db = "2017-10-12 12:00:00"; 

setlocale(LC_ALL, "de_DE.UTF-8"); 

$date_db = strtotime($date_db); 

$date_db = strftime("%e. %B %Y, %A, %k:%M Uhr", $date_db); 

$date_db = str_replace(":00","",$date_db); 

echo $date_db; 
?> 

Выход: 12. Oktober 2017, Donnerstag, 12 Uhr

Это все хорошо до сих пор. Но иногда нет времени, только дата, например: $date_db = "2017-10-12 00:00:00";.

Это будет выводить: 12. Oktober 2017, Donnerstag, 0 Uhr.

В таком случае, я хочу удалить задние , 0 Uhr.

Я думаю, что он должен работать, используя эту строку кода под другим кодом str_replace: $date_db = str_replace(", 0 Uhr","",$date_db);.

Всего код:

<?php 
$date_db = "2017-10-12 00:00:00"; 

setlocale(LC_ALL, "de_DE.UTF-8"); 

$date_db = strtotime($date_db); 

$date_db = strftime("%e. %B %Y, %A, %k:%M Uhr", $date_db); 

$date_db = str_replace(":00","",$date_db); 

$date_db = str_replace(", 0 Uhr","",$date_db); 

echo $date_db; 
?> 

Это должно выход 12. Oktober 2017, Donnerstag, но выход 12. Oktober 2017, Donnerstag, 0 Uhr.

Что я делаю неправильно?

ответ

2
$date_db = "2017-10-12 10:00:00"; 
setlocale(LC_ALL, "de_DE.UTF-8"); 
$date_db = strtotime($date_db); 
$date_db = strftime("%e. %B %Y, %A, %k:%M Uhr", $date_db); 
$date_db = str_replace(":00","",$date_db); 

//check if string contains O Uhr then only trim 
if(preg_match("/ 0 Uhr/", $date_db)){ 
    $date_db = str_replace("0 Uhr","",$date_db); 
    $date_db = rtrim($date_db, ' ,'); 
} 
echo $date_db; 
+0

Работы. Но при использовании '$ date_db =" 2017-10-12 10:00:00 ";' output должно быть '12. Октябрь 2017, Доннерстаг, 10 часов, но это «12. Октябрь 2017, Доннерстаг, 1'. Почему так? – David

+0

Да, я пропустил это. Вам нужно будет проверить, содержит ли строка «0 Uhr», а затем только два последних шага. – Jagrati

+0

@DAVID проверить это сейчас, я отредактировал ответ. – Jagrati

1
<?php 
$string = '12. Oktober 2017, Donnerstag, 0 Uhr'; 
$string = str_replace(", 0 Uhr", "", $string); 
echo $string; 
+0

Привет, спасибо за Ваш ответ. Второй код работает так, как есть. Но при использовании '$ string =" 2017-10-12 00:00:00 "; setlocale (LC_ALL, "de_DE.UTF-8"); $ string = strtotime ($ string); $ string = strftime ("% e.% B% Y,% A,% k:% M Uhr", $ string); $ string = str_replace (": 00", "", $ string); 'вместо' $ string = '12. Oktober 2017, Donnerstag, 0 Uhr '; ', я все еще получаю' 12. Oktober 2017, Donnerstag, 0 Uhr'. – David

+0

Первый код также работает так, как есть. Но при использовании '$ string = '12. Oktober 2017, Donnerstag, 14 Uhr '; 'вместо' $ string = '12. Oktober 2017, Donnerstag, 0 Uhr '; ', вывод:' 12. Октябрь 2017, Доннерстаг, 14'. – David

3
//(rtrim) Removes whitespace or other predefined characters from the right side of a string 


<!---language:lang-php--> 
<?php 
$date_db = "2017-10-12 00:00:00"; 

setlocale(LC_ALL, "de_DE.UTF-8"); 

$date_db = strtotime($date_db); 

$date_db = strftime("%e. %B %Y, %A, %k:%M Uhr", $date_db); 

$date_db = str_replace(":00","",$date_db); 

$date_db = rtrim($date_db ,", 0 Uhr");//(rtrim) Removes whitespace or other predefined characters from the right side of a string 

echo $date_db; 
?> 
+0

При использовании '$ date_db =" 2017-10-12 12:00:00 ";' Я получаю '12. Октябрь 2017, Доннерстаг, 12' вместо '12. Октябрь 2017, Доннерстаг, 12 часов вечера. Почему так? – David

+0

Но вы хотели «12. октября 2017 года, Доннерстаг, 12 часов назад». не это 12. Октябрь 2017, Доннерстаг, 12 –

+0

Я не понимаю, что вы имеете в виду. Используя этот код '$ date_db =" 2017-10-12 12:00:00 ";' Я хочу получить: '12. Октябрь 2017, Доннерстаг, 12 часов вечера. Но с вашим кодом я получаю только «12». Октябрь 2017, Доннерстаг, 12' вместо. – David

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