Ama*_*shy 3 php date datepicker
我有两个箭头图像,一个向后递增月份,一个通过href向前递增.
if (ISSET($_GET["month"])){
$month_index = $_GET["month"];
}
else{
$month_index = 0;
}
$month = strtotime("+".$month_index." month");
?>
...
<a href=<?php $month_index = $month_index - 1; echo "?month=".$month_index; ?>><img src="arrow_left.gif" ></a>
<div class="title">Logbook Calendar for <?php echo date("F Y",$month); ?> </div>
<a href=<?php $month_index = $month_index + 2; echo "?month=".$month_index; ?>><img src="arrow_right.gif"></a>
Run Code Online (Sandbox Code Playgroud)
问题是当2015年2月出现时,date()返回"March 2015" - 所以$ month_index = 6和$ month_index = 7都是March.
我在http://writecodeonline.com/php/上运行了这段代码:
date_default_timezone_set("America/New_York");
$month_index = 6;
$month_index = $month_index - 1;
$month_index = $month_index + 2;
echo $month_index;
$month = strtotime("+".$month_index." month");
echo " " . $month;
echo " " . date("F Y",$month);
Run Code Online (Sandbox Code Playgroud)
将$ month_index = 6切换为$ month_index = 7仍会导致March回应.这里有一些错误,2015年2月是......已经消失了吗?
更新:谢谢大家.我自己也从来没有找到过这个.我这样解决了问题:
$month = strtotime(date("M-01-Y") . "+".$month_index." month");
Run Code Online (Sandbox Code Playgroud)
这是日期的工作方式,以及您遇到2月和29个月或更晚的时间.当您在该年2月的最后一天(即今年2月28日)之后添加一个月时,您将跳过2月份.每当迭代几个月时,您应始终使用月初,以避免二月被跳过.因此,如果您从1月30日开始并添加"一个月",因为没有2月30日,您将跳到3月.
以下是如何在不知道二月份(或关心)多少天的情况下迭代数月.我从现在开始选择了一年的任意结束日期.
$start = new DateTimeImmutable('@'.mktime(0, 0, 0, $month_index, 1, 2014));
$end = $start->modify('+1 year')
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format('F Y');
}
Run Code Online (Sandbox Code Playgroud)
2015年2月29日没有.
通过一次只添加或减去整月,您可以在请求的月份的同一天创建新日期.在这种情况下,您导致PHP尝试创建2015年2月29日的日期.它自动跳到2015年3月1日.
如果您只关心月份,请在每个月的第一天创建日期:
date("F y", mktime(0,0,0, $month_index, 1, 2015));
Run Code Online (Sandbox Code Playgroud)
你正在编写这段代码并抓住今天的bug,或者你会遇到一个只出现在每个月的29日(或31日)(闰年除外)的错误!
日期很难.
归档时间: |
|
查看次数: |
935 次 |
最近记录: |