这是我的作业,我被要求将时间从12小时转换为24小时,以这种格式05:09:15AM
提供时间。我是编程的新手,这就是为什么不是进入循环而是我决定用条件语句来做。所以,我创建了4个条件(我使用条件为shown here)
那么问题是什么?问题是我在打印$_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 :(得分: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;
时它未定义。但是在初始化中初始化变量的良好做法。
答案 1 :(得分:1)
您有内置函数来转换日期时间对象。你可以参考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;
?>
答案 2 :(得分:0)
要点仅是更改小时值,如果PM,则加+12,如果AM,则更改为00。
<?php
$s = "07:05:45PM";
$s = explode(':',$s);
$time = substr($s[2],2,4);
$s[2] = substr($s[2],0,2);
if($time == "PM") {
if($s[0] != "12")
$s[0] = $s[0]+12;
}
if($time == "AM") {
if($s[0] == "12")
$s[0] = "00";
}
echo implode(":",$s);
?>
答案 3 :(得分:-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