php日历模块的运算逻辑求解!如何求日期对应的星期几!

1) 查询这个月份的 天数 2014-06 ; 请提供一个方法
2) 查询 2014-06-23 对应星期几; 请提供一个方法
3) 看图:26-27-28-29-30-31;如何动态计算出 上星期有多少天 ; 然后通过 for 循环 输出对应数量
1]$LastWeek = (7 - 本月的1号对应星期几) // 这个求上个月 最后一周的天数合适吗?
2]$ThemDay = 查询月份的天数 // 本月有几天
3]$NextDay = (5x7) -($LastWeek +$ThemDay) //下个月符合条件的有几天
4)
5)说套插件的大牛就免开尊口了! 希望能讲出 运算方式;研究这个东西好久了; 求思路!!!

现在以2010年6月14日为例说明。6月份共有30天,在这个日历表中共5行,首先需要确定当前所在的日期(当然也可以指定一个日期),比如14日,通过表格可以知道它在第3行对应星期一那列(第3周)。通常每个月第1天不是在表格开始的位置,位置并不固定,同样不固定的还有每个月的周数,有时候是4周,有时候是5周。这样,想要完成这个日历表格就需要确定一些基础的日期变量,下面具体来看需要设定的基础变量。

  PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。通过date()函数可以很容易获得上面的数据。

  <?php

  //date()函数的基本用法

  $year = date('Y'); //获得年份,例如2006

  $month = date('n'); //获得月份,例如04

  $day = date('j'); //获得日期,例如3

  ?>

  通过mktime()函数和date()函数获得当月的总天数。

  //获得当月的总天数

  $daysInMonth = date("t",mktime(0,0,0,$month,1,$year));

  同样是组合使用mktime()函数和date()函数,获得该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。

  //获得每个月的第一天,例如4

  $firstDay = date("w", mktime(0,0,0,$month,1,$year));

  现在重新来观察下这个日历表格,我们发现,表格中的值是从1到x(当月的总天数)。我们可以形象地通过一个坐标来表示每一个位置(x,y),表格的起始位置是(0,0),结束位置是(5,4),当月第一天的起始位置是(0,3)。现在来创建一个二维数组来存储对应的日期。

  (1)需要获得表格的数目。

  //计算数组中的日历表格数

  $tempDays = $firstDay + $daysInMonth;

  (2)需要算出该月一共有几周(即表格的行数)。

  //获得表格行数

  $weeksInMonth = ceil($tempDays/7);

  (3)在获得行数的变量之后,创建一个二维数组用来存放日期信息,代码如下:

  <?php

  for($j=0;$j<$weeksInMonth;$j++)

  {

  for($i=0;$i<7

  ;$i++)

  {

  $counter ++;

  $week [$j] [$i] = $counter;

  }

  }

  ?>

  (4)细心的读者可能发现,上面的代码其实是一个雏型,因为它处理出来的数据并没有过滤那些空白的表格单元。下面来继续改造下这段代码,加入过滤和构造的部分。改造后的代码如下:

  <?php

  //创建日期二维数组

  for($j = 0; $j < $weeksInMonth; $j ++) {

  for($i = 0; $i < 7; $i ++) {

  $counter ++;

  $week [$j] [$i] = $counter;

  //日期偏移量

  $week [$j] [$i] -= $firstDay;

  if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {

  $week [$j] [$i] = "";

  }

  }

  }

  ?>

  (5)在获得正确的二维数组之后,就可以通过foreach()函数将存储的日期信息遍历出来,同时插入HTML标签创建日期

不知是否正确,转自我的一个朋友追问

function Date($Y,$M,$D,$Na,$Obj){

//$Y 指定年份
//$M 指定月份
//$D 指定日期

//$Na;接收值
//$Obj被查询的对象

$Na = date("$Obj",mktime(0,0,0,$M,$D,$Y));
};

如果将查询 日期通过传参方式 这样表示可以吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-27

你这问题有点绕脑袋啊!

看了半天也没完全看明白你是什么意思!

php日期处理函数,是date()

有2个参数, 第一个参数是需要返回的日期格式

第二个参数是日期表达式

第一个参数必须,第二个参数可以省略!

回到正题,要求得某一个日期对应星期几,

 echo date('w', strtotime('2015-02-27'));//结果5, 也就是星期五, 注意的是,星期天是0,其他是一样的,星期一就返回1.。。。。

要求某一月有多少天

echo date('t', strtotime('2015-02-27')); //会得到28, 二月份就是28天

根据这个,你就可以做出你上面的那个表了!

不过农历怎么弄,这个,我也不知道,也得去研究研究!

本回答被网友采纳
第2个回答  2015-02-27
1) 查询这个月份的 天数 2014-06 ; php有现成的方法 :$days=date('t',"2014-06");这个$days就是这个6月份的天数,
2)至于查询2014-06-23 对应的是星期几,下面是我自己找的修改过的一个函数可以获取到
//PHP 获取指定日期星期几
function transition ($date) {

$datearr = explode("-", $date); //将传来的时间使用“-”分割成数组

$year = $datearr[0]; //获取年份

$month = sprintf('%02d', $datearr[1]); //获取月份

$day = sprintf('%02d', $datearr[2]); //获取日期

$hour = $minute = $second = 0; //默认时分秒均为0

$dayofweek = mktime($hour, $minute, $second, $month, $day, $year); //将时间转换成时间戳

$weekday= date("w", $dayofweek); //获取星期值(数字0-7)

$weekarray=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
return $weekarray[$weekday];
}
$day= transition("2014-06-23");
echo $day;
//输出结果为:星期1追问

function Date($Y,$M,$D,$Na,$Obj){
//$Y 指定年份
//$M 指定月份
//$D 指定日期

//$Na;接收值
//$Obj被查询的对象

$Na = date("$Obj",mktime(0,0,0,$M,$D,$Y));
};

这样的传参表达式可以吗?

追答

需要传这么多的参数吗?这个传参表达式有点小问题
function Date($Y,$M,$D,$Obj){
//$Y 指定年份
//$M 指定月份
//$D 指定日期
//$Na;接收值
//$Obj被查询的对象
$Na = date($Obj,mktime(0,0,0,$M,$D,$Y));
return $Na ; //返回得到的接收值
};
外面直接调用就可以了

追问


通过传参似乎没有 接收到函数内的值 ; 求科普,再+100积分

追答

你要把函数返回的值赋给一个变量如:
$str=Jn($Str,'t',$Year,$Mon,1);
echo $str;

追问

Php传参格式似乎必须加&才哦正常的传参……不过问题还是解决了

本回答被提问者采纳