现在以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标签创建日期
不知是否正确,转自我的一个朋友
$date = isset($_GET['date']) $_GET['date'] : date('Y-m-d'); //你可以通过get接收具体日期,或者当天日期为中心显示一个日历具体可以再改改样式的区别而已,没法上传样式,你自己调整吧
$stmp=strtotime($date);
$date = getdate($stmp);
$end = getdate(mktime(0, 0, 0, $date['mon'] + 1, 1, $date['year']) - 1);
$start = getdate(mktime(0, 0, 0, $date['mon'], 1, $date['year']));
$pre = date('Y-m-d', $start[0] - 1);
$next = date('Y-m-d', $end[0] + 86400);
$html = '<div class="weeks-lef">';
$html = '<div id="calendar"><p>';
$html = '<a href=""><img src="" ></a>
<span>'$date['year'] '' $date['mon']' </span><a href="'" ><img src="themes\mall\default\styles\default\new\images\228-17png"></a>';
$html = ' <ul><li class="week">日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li class="week">六</li>';
$arr_tpl = array(0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '');
$date_arr = array();
$j = 0;
for ($i = 0; $i < $end['mday']; $i++) {
if (!isset($date_arr[$j])) {
$date_arr[$j] = $arr_tpl;
}
$date_arr[$j][($i+$start['wday'])%7] = $i+1;
if ($date_arr[$j][6]) {
$j++;
}
}
//var_dump($date_arr);
foreach ($date_arr as $value) {
//$html = '<tr>';
foreach ($value as $v) {
if ($v) {
if ($v == $date['mday']) {
$html = '<li><a class="selected" href="">' $v '</a></li>';
} else {
$html = '<li><a href="">' $v '</a></li>';
}
} else {
$html = '<li> </li>';
}
}
//$html = '</tr>';
}
$html = '</ul></div>';
PHP计算一年多少个星期和每周的开始和结束日期方法如下:
方法一:
<php
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
$year = (int)$_GET['year'];
$week = (int)$_GET['week'];
$weeks = date("W", mktime(0, 0, 0, 12, 28, $year));
echo $year '年一共有' $weeks '周<br />';
if ($week > $weeks || $week <= 0)
{
$week = 1;
}
if ($week < 10)
{
$week = '0' $week;
}
$timestamp['start'] = strtotime($year 'W' $week);
$timestamp['end'] = strtotime('+1 week -1 day', $timestamp['start']);
echo $year '年第' $week '周开始时间戳:' $timestamp['start'] '<br />';
echo $year '年第' $week '周结束时间戳:' $timestamp['end'] '<br />';
echo $year '年第' $week '周开始日期:' date("Y-m-d", $timestamp['start']) '<br />';
echo $year '年第' $week '周结束日期:' date("Y-m-d", $timestamp['end']);
>
方法二: <php
header("Content-type:text/html;charset=utf-8");
function getIsoWeeksInYear($year)
{
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" 53 : 52);
}
function weekday($custom_date)
{
$week_start = date('d-m-Y', strtotime('this week monday', $custom_date));
$week_end = date('d-m-Y', strtotime('this week sunday', $custom_date));
$week_array[0] = $week_start;
$week_array[1] = $week_end;
return $week_array;
}
echo '<br> Weeks in 2013<br>' getIsoWeeksInYear(2013);
$weekday = weekday(strtotime(date('d-m-Y', strtotime('5-8-2013'))));
echo '<br> 10-8-2013';
echo '<br>Start: ' $weekday[0];
echo '<br>End: ' $weekday[1];
>
或者方法三:
function get_week($year) {
$year_start = $year "-01-01";
$year_end = $year "-12-31";
$startday = strtotime($year_start);
if (intval(date('N', $startday)) != '1') {
$startday = strtotime("next monday", strtotime($year_start)); //获取年第一周的日期
}
$year_mondy = date("Y-m-d", $startday); //获取年第一周的日期
$endday = strtotime($year_end);
if (intval(date('W', $endday)) == '7') {
$endday = strtotime("last sunday", strtotime($year_end));
}
$num = intval(date('W', $endday));
for ($i = 1; $i <= $num; $i++) {
$j = $i -1;
$start_date = date("Y-m-d", strtotime("$year_mondy $j week "));
$end_day = date("Y-m-d", strtotime("$start_date +6 day"));
$week_array[$i] = array (
str_replace("-",
"",
$start_date
), str_replace("-", "", $end_day));
}
return $week_array;
}
函数get_week()通过传入参数$year年份,获取当年第一天和最后一天所在的周数,计算第一周的日期,通过循环获取每一周的第一天和最后一天的日期。最后返回是一个数组。
想得到指定周数的开始日期和结束日期,比如2011年第18周的开始日期和结束日期,代码如下:
复制代码 代码如下:
$weeks = get_week(2011);
echo '第18周开始日期:'$weeks[18][0]'';
echo '第18周结束日期:'$weeks[18][1];
最后输出结果:
第18周开始日期:20110502
第18周结束日期:20110508
PS做日历方法:
1、首先是用PS制作日历当然是先双击photoshop图标或单击右键打开photoshop。
2、新建文件,分辨率72,颜色模式为GRB,背景颜色为白色,大小就看是做哪一种日历。
3、标准台历尺寸]1425210mm挂历尺寸大致有:685373mm570430mm480mm×770mm490mm×1100mm760mm×1360mm。
4、也能不能在网上下载一张自己喜欢的或用自己的照片作为背景哦,网上的记得去掉水印。
5、选择文字工具输入,单击右键选择横排和竖排输入文字,对照相应的日历在上输入月份与日期等信息。
6、字体能不能换自己喜欢的,颜色、大小也能不能换,一切看个人爱好。美美的日历就做好了。
签到功能主要是需要获取上次签到时间,然后进行比对,如果比较之后在零点之后,且大于24小时,就认为连续签到失败。
关键点:每次需要记录签到时间,这样以后无论是根据记录,还是相应算法都可以统计相关的签到记录。
签到功能核心就是时间的比较,只要比对好时间,然后封装签到方法,就可以轻松记录签到情况。
以上就是关于php日历模块的运算逻辑求解!如何求日期对应的星期几!全部的内容,包括:php日历模块的运算逻辑求解!如何求日期对应的星期几!、php日历输出函数(具体要求见图)、PHP计算一年多少个星期和每周的开始和结束日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)