2015-10-24 4 views
0

Это моя домашняя работа, в которой меня попросили конвертировать время с 12 часов до 24 часов, когда было предоставлено время в этом формате 05:09:15AM. Я новичок в программировании, поэтому вместо того, чтобы идти в циклы, я решил сделать это с условными утверждениями. Итак, я создал 4 условия (я использовал условия как shown here)Преобразование от 12 часов до 24 часов в PHP

В чем проблема? Проблема в том, что я получаю сообщение об ошибке $_time variable is undefined, когда я печатаю $_time. По моему пониманию, это происходит потому, что переменная $_time находится внутри функций. Но если это так, можете ли вы мне посоветовать, как это сделать?

<?php 
$_a = ("07:29:23PM"); 
$_a = explode(':',$_a); 
if($_a[0] == 12 && $_a[1] <= 59 && strpos("PM", $_a[2] !== FALSE)) 
{ 
    $_rpl = str_replace("PM","",$_a[2]); 
    $_time = $_a[0].":".$_a[1].":".$_rpl; 
} 
elseif($_a[0] < 12 && $_a[1] <= 59 && strpos("PM", $_a[2] !== FALSE)) 
{ 
    $_a[0] += 12; 
    $_rpl = str_replace("PM","",$_a[2]); 
    $_time = $_a[0].":".$_a[1].":".$_rpl; 
} 
elseif($_a[0] == 12 && $_a[1] <= 59 && strpos("AM", $_a[2] !== FALSE)) 
{ 
    $_a[0] = 00; 
    $_rpl = str_replace("AM","",$_a[2]); 
    $_time = $_a[0].":".$_a[1].":".$_rpl; 
} 
elseif($_a[0] < 12 && $_a[1] <= 59 && strpos("AM", $_a[2] !== FALSE)) 
{ 
    $_rpl = str_replace("AM","",$_a[2]); 
    $_time = $_a[0].":".$_a[1].":".$_rpl; 
} 

echo $_time; 

?> 
+0

Если он говорит, что '$ _time' не определен, это потому, что в текущей области он не может разрешить имя' $ _time'. попробуйте добавить '$ _time;' в новую строку после '$ _a = explode (':', $ _ a);' –

+1

oh его не определяется, потому что все ваши условные условия терпят неудачу, что-то кажется неправильным: 'strpos (" PM ", $ _a [2]! == FALSE)' ?? это должно быть 'strpos (" PM ", $ _a [2])! == FALSE' –

+0

Спасибо @ iam-decoder за обнаружение ошибки, но это уведомление (ошибка) сохраняется – Vivek

ответ

2

В коде есть несколько ошибок. Неправильный синтаксис strpos.

strpos("PM", $_a[2] !== FALSE) // this is incorrect

Это вы должны написать

strpos($_a[2],"PM") //string first and search second.

Это возвращает целое число, положение строки поиска в строке, так что не используйте false использовать вместо >-1

strpos($_a[2],"PM") > -1) //this is the correct method.

Также определите $_time; в начале и инициализируйте его.

<?php 
    $_a = ("07:29:23PM"); 
    $_a = explode(':',$_a); 
    $_time = "";     //initialised the variable. 
    if($_a[0] == 12 && $_a[1] <= 59 && strpos($_a[2],"PM") > -1) 
    { 
     $_rpl = str_replace("PM","",$_a[2]); 
     $_time = $_a[0].":".$_a[1].":".$_rpl; 
    } 
    elseif($_a[0] < 12 && $_a[1] <= 59 && strpos($_a[2],"PM")>-1) 
    { 
     $_a[0] += 12; 
     $_rpl = str_replace("PM","",$_a[2]); 
     $_time = $_a[0].":".$_a[1].":".$_rpl; 
    } 
    elseif($_a[0] == 12 && $_a[1] <= 59 && strpos($_a[2],"AM") >-1) 
    { 
     $_a[0] = 00; 
     $_rpl = str_replace("AM","",$_a[2]); 
     $_time = $_a[0].":".$_a[1].":".$_rpl; 
    } 
    elseif($_a[0] < 12 && $_a[1] <= 59 && strpos($_a[2],"AM")>-1) 
    { 
     $_rpl = str_replace("AM","",$_a[2]); 
     $_time = $_a[0].":".$_a[1].":".$_rpl; 
    } 
    echo $_time; 
    ?> 

Фактически, инициализирующая переменная не вызывала ошибку. Ошибка была в вашем синтаксисе strpos, поэтому ни одно из условий if не было истинным, поэтому код не выполнялся, поэтому при попытке выполнить echo $_time; он не был определен. Но его хорошая практика - инициализировать переменную в самом начале.

+0

Ответ принят. Спасибо @ Субин Томас, что помогло. Но можете ли вы объяснить, как инициализация переменной устранила ошибку? – Vivek

+1

Фактически, инициализирующая переменная не вызывала ошибку. Ошибка была в синтаксисе strpos, поэтому ни одно из условий if не было истинным, поэтому никакого кода не выполнялось, поэтому при попытке выполнить эхо-запрос $ _time; он не был определен. Но его хорошая практика - инициализировать переменную в самом начале[email protected] –

+0

Thankyou @Subin :) – Vivek

1

У вас есть встроенные функции для преобразования объектов datetime. Для этого вы можете обратиться к руководству по php.

Если вы хотите конвертировать вручную, вы можете сделать это.

<?php 
$_a = ("10:29:23PM"); 
$_a = explode(':',$_a); 
if(strpos($_a[2],"PM") > -1) //if PM given 
{ 
$_a[2] = str_replace("PM","",$_a[2]); //remove the PM 
if($_a[0] <12)   //if time less than 12 
$_a[0] = $_a[0] + 12; //then add 12 hours 
} 
if(strpos($_a[2],"AM") > -1) //if AM given 
{ 
$_a[2] = str_replace("AM","",$_a[2]); //remove AM 
if($_a[0]=='12')  //if 12 AM 
$_a[0]='00';   //make it 0 
} 
$newtime = $_a[0].':'.$_a[1].':'.$_a[1]; 
echo $newtime; 
?> 
+0

Ну .. Спасибо @ Субин Томас. Можете ли вы рассказать мне, почему я не получаю в моем коде $ _time echo. – Vivek

+1

@Vivek проблема с разрешением проблемы –

+0

Спасибо @ iam-decoder, но как я могу это исправить? – Vivek

-1
$string="10:29:23PM"; 
$a=substr($string, 0, 8); 
$b= substr($string, 8, 10); 
$dates=$a." ".$b; 
// 12-hour time to 24-hour time 
echo $time_in_24_hour_format = date("H:i:s", strtotime("$dates")); 
    // 22:29:23 
echo $time_in_24_hour_format = date("H:i", strtotime("$dates")); 
    // 22:29 
+1

вопрос был не "как это сделать?" это было: «Почему это не работает?». также для ваших собственных усилий, НИКОГДА не используйте 'strtotime()' для конверсий: [см. почему] (http://sandbox.onlinephpfunctions.com/code/ac41f38490a9cf857fda9553af54ba5bdbfa8b5e) –

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