尝试将时间转换为 - 215 pm或2:15 am或其他任何类型的14:15或02:15字符串。 (我没有使用TIME格式,因为这样做很乏味。)
设法获得包含小时,分钟和上午/下午的数组输出(但仅在存在字符的情况下)。
我想允许错误的字符,所以我可以明确地发出错误信息,但是a)我无法进行“简单”的OR测试,而b)strtolower
对我不起作用 - 我不知道知道原因。
$hour= $matches['h'];
$minute=$matches['m'];
if(!array_key_exists('ap', $matches)){$matches ['ap'] ="am";};
$ampm=$matches['ap'];
strtolower ($ampm);
debug ($hour,"hr");
debug ($minute,"min");
debug ($ampm,"ampm");
if ($ampm=="am" or $ampm=="pm") {echo "fine";}; // ALWAYS TRUE
if ($ampm==="am" or $ampm==="pm") {echo "fine";}; // FAILS WITH UPPER CASE AM AND PM
if ($hour<12 and $ampm=="pm") {$hour = $hour+12;};
debug ($hour,"hr");
debug ($minute,"min");
debug ($ampm,"ampm");
所以我不明白为什么简单的字符串测试$ampm=="am" or $ampm=="pm"
总是正确的,但这只是学术性的。但我真的不明白为什么strtolower
不会将“AM”改为“am”,因此我甚至无法使用===
同余测试。
有什么想法吗?
答案 0 :(得分:4)
代码中的简单错误。变化:
strtolower ($ampm);
要:
$ampm = strtolower ($ampm);
答案 1 :(得分:1)
执行此操作以替换变量:
$ampm = strtolower($ampm);
此外,$ ampm始终为真,因为条件为
&#34;如果是,则为真,如果是下午,则为真,&#34;
所以你想做的是:
if(isset($ampm) && $ampm === "am")
{
//its am
} else if(isset($ampm) && $ampm === "pm")
{
//its pm
} else
{
//its neither
}