[英]Display dates in month wise
I've select some dates from the database and display these dates in month wise.. Am using the following code 我从数据库中选择了一些日期,并按月显示这些日期。我使用以下代码
$work_res = mysql_query("(SELECT DISTINCT date FROM `work_details` WHERE employee_id='" . $emp_id . "' and date between '" . $qsdate . "' and '" . $qedate . "') UNION (SELECT holy_date from holiday where holy_date between '" . $qsdate . "' and '" . $qedate . "')");
while ($row = mysql_fetch_array($work_res)) {
echo date("F", $test_date).'<br>';
while ((date("Y-m-d", $test_date) < $row['date']) && ($flag = 0)) {
if (!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) {
echo "<tr ><td align=center class=fontclass style=color:FF0000>" . date("Y-m-d F", $test_date) . "</td></tr>";
}
$test_date = $test_date + ($day_incrementer * 60 * 60 * 24);
}
$flag = 1;
while ((date("Y-m-d", $test_date) != $row['date'])) {
if (!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) {
echo "<tr><td align=center class=fontclass style=color:FF0000>" . date("Y-m-d F", $test_date) . "</td></tr>";
}
$test_date = $test_date + ($day_incrementer * 60 * 60 * 24);
}
$test_date = $test_date + ($day_incrementer * 60 * 60 * 24);
}
while (date("Y-m-d", $test_date) <= date("Y-m-d", $end_date)) {
if (!(date('N', strtotime(date("Y-m-d", $test_date))) >= 6)) {
echo "<tr><td align=center class=fontclass style=color:FF0000>" . date("Y-m-d F", $test_date) . "</td></tr>";
}
$test_date = $test_date + ($day_incrementer * 60 * 60 * 24);
}
return;
}
Got the result like 得到了结果
2012-01-16 January
2012-01-26 January
2012-01-27 January
2012-02-02 February
2012-03-21 March
2012-03-22 March
I want to display these dates like 我想显示这些日期
January (3)
2012-01-16
2012-01-26
2012-01-27
February (1)
2012-02-02
March(2)
2012-03-21
2012-03-22
Is this possible? 这可能吗? Please help 请帮忙
Here is something that will work but needs to be tested. 这是可行的,但需要进行测试。 You need to insert your logic in the dateIsValid() function. 您需要在dateIsValid()函数中插入逻辑。
<?php
$work_res = mysql_query("(SELECT DISTINCT date FROM `work_details` WHERE employee_id='" . $emp_id . "' and date between '" . $qsdate . "' and '" . $qedate . "') UNION (SELECT holy_date from holiday where holy_date between '" . $qsdate . "' and '" . $qedate . "')");
//Group all dates into their Months
while($result = @mysql_fetch_array($work_res))
{
$date = $result['date'];
$month = date("F",$date );
//Your complex logic in between...
if(dateIsValid())
$output[$month][] = date("Y-m-d", $date);
}
//Display as required
foreach($output as $month => $dates)
{
echo $month." (".count($dates).")"; //Echo the month heading
foreach($dates as $date) echo $date; //Echo the date
}
Notes : 备注:
You want an array where the key is the full month name. 您需要一个数组,其中键是完整的月份名称。 You'll want to do something like this... 你会想做这样的事......
$dateArray=array();
while (($row = mysql_fetch_array($work_res)){
$d = new DateTime($row['date']);
$monthName = $d->format('F');
//$monthName = $d->format('F_Y'); (If you want month_year)
$dateArray[$monthName][] = $row['date'];
}
array(3) {
["January"]=>
array(3) {
[0]=>
string(10) "2012-01-16"
[1]=>
string(10) "2012-01-26"
[2]=>
string(10) "2012-01-27"
}
["February"]=>
array(1) {
[0]=>
string(10) "2012-02-02"
}
["March"]=>
array(2) {
[0]=>
string(10) "2012-03-21"
[1]=>
string(10) "2012-03-22"
}
}
You could do something like this to get what you are looking for 你可以做这样的事情来获得你想要的东西
Use DateTime like Dutchie432 suggested 像Dutchie432建议使用DateTime
result = array();
while ($row = mysql_fetch_array($work_res))
{
$tmp_time = strtotime(row['date']);
$tmp_month = date('F',$tmp_time);
$tmp_date = date('Y-m-d', $tmp_time);
if(!is_array($result[$tmp_month]))
{
$result[$tmp_month] = array();
}
array_push(result[$tmp_month], $tmp_date);
}
# this will print something similar to your req
foreach($result as $month => $dates)
{
echo $month . " (" . $result[$month].length . ")";
foreach($dates as $date)
{
echo $date;
}
}
Instead of printing the dates as and when add the dates to an array like 而不是在将日期添加到数组中时打印日期
wherever you are using echo $test_date apend to an array say 无论你在哪里使用echo $ test_date apend到数组说
$leavesTakes[]=$date("Y-m-d F", $test_date)
and now use the loop to display dates 现在使用循环显示日期
for($i=0;$i<count($leavesTakes);$i++)
{
$cnt=0;
for($j=$i;$j<count($leavestaken);$j++)
{
if($leavesTaken[$i]!=$leavesTaken[$j])
break;
$cnt++;
}
//print month name
echo '<tr><td> month name (' + $cnt + ')'; //print month name
for(;$i<$j;$i++)
echo '<br/>$date("Y-m-d F", $leavesTaken[$i]);
echo '</td></tr>';
}
I dont know the format to print the month name from the date. 我不知道从日期打印月份名称的格式。 So please ignore print month name and replace with the actual php function to print month name 所以请忽略打印月份名称并替换为实际的php函数来打印月份名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.