我写了一些代码来comapre日期,在这里我得到的问题是当我输入日期时2012/3月23日输出有时正确,有时错误。当我输入日期为2012/03/23输出也有时会发生错误,有时会出错。我可以解决这个问题吗?
<?php
$month = 2;
$year = 2012;
$saturday = strtotime('First Saturday '.date('F o', mktime(0,0,0, $month, 1, $year)));
echo date('Y/M/d', $saturday);
$sat1 = strtotime($saturday);
echo "<br/>";
$season1 = strtotime ( '+12 week' , $saturday);
$season2= date ( 'Y/M/d' , $season1 );
echo $season2;
$season = strtotime($season1);
echo "<br/>";
$date = $_POST["date"];
echo $date;
$date1 = strtotime($date);
echo "<br/>";
$abc = strtotime ('+1 week' , $season1);
$abc = date ('Y/M/d', $abc);
echo "<br/>";
echo $abc;
$abc1 = strtotime($abc);
if ($date1 <= $abc1)
{
if ($date1 <= $season)
{
echo "League already opened";
}
else if($date1 > $season)
{
echo "league successfully closed";
}
}
else
{
echo "league 1 closed";
}
if(!isset($POST['submit'])) {
?>
<form method="post" action=" ">
<label>enter date in YYYY/MM/DD format</label>
<input type="text" name="date" size="10" />
<input type="submit" value="submit" name="submit">
</form>
<?
}
?>
并在输出中显示if条件中的msg。提交表单
答案 0 :(得分:2)
尝试这样:
$date = DateTime::createFromFormat('Y/m/d', '2012/03/23');
echo $date->format('Y/m/d');
或者像这样:
$date = DateTime::createFromFormat('Y/M/d', '2012/Mar/23');
echo $date->format('Y/m/d');
答案 1 :(得分:1)
在您的代码中date('Y/M/d')
格式是主要问题。它返回空的时间戳,因为它产生错误的答案。所以请在这里使用Y / m / d格式进行strtotime。
感谢
答案 2 :(得分:0)
strtotime不支持“Y / M / d”
它只支持“Y / m / d”(注意小写m)
因此,您的逻辑应该有一个数据类型“Y / m / d”,当您想要输出到用户的屏幕时,只需将显示格式化为“Y / M / d”
答案 3 :(得分:0)
要解决您的问题,请按以下步骤操作:
1.不要使用Y / M / d格式进行操作。仅使用Y-m-d格式。
2.“第一个星期六”是从给定日期算起的。如果给定日期已经是星期六,则计算下一个日期。
3.你一次又一次地围绕strtotime()
和date()
函数支付费用
4.如果你想在星期六strtotime()
,请在表示层使用Y / M / d格式,那么为什么还要以日期格式转换它呢?
总之,为了更清楚,保持你的表现和操纵分开。发生这种情况是因为你一次做两件事。