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

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

现在以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计算一年多少个星期和每周的开始和结束日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9877619.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存