转自:http://www.dodobook.net/php/1451
时间函数是PHP里面的日常函数,时间的默认时期,今天、昨天、明天 、上一周、下一周,本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间,指定日期的周一和周日等等方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
date_default_timezone_set(
'PRC'
);
//默认时区
//当前的时间增加5天
$date1
=
"2014-11-11"
;
echo
date
(
'Y-m-d'
,
strtotime
(
"$date1 +5 day"
));
//输出结果:2014-11-16
//相应地,要增加月,年,将day改成month或year即可
//+++ 今天、昨天、明天 、上一周、下一周 +++++++++
echo
"今天:"
,
date
(
"Y-m-d"
,time()),
"
;
echo
"昨天:"
,
date
(
"Y-m-d"
,
strtotime
(
"-1 day"
)),
"
;
echo
"明天:"
,
date
(
"Y-m-d"
,
strtotime
(
"+1 day"
)),
"
;
echo
"一周后:"
,
date
(
"Y-m-d"
,
strtotime
(
"+1 week"
)),
"
;
echo
"一周零两天四小时两秒后:"
,
date
(
"Y-m-d G:H:s"
,
strtotime
(
"+1 week 2 days 4 hours 2 seconds"
)),
"
;
echo
"下个星期四:"
,
date
(
"Y-m-d"
,
strtotime
(
"next Thursday"
)),
"
;
echo
"上个周一:"
.
date
(
"Y-m-d"
,
strtotime
(
"last Monday"
)).
"
;
echo
"一个月前:"
.
date
(
"Y-m-d"
,
strtotime
(
"last month"
)).
"
;
echo
"一个月后:"
.
date
(
"Y-m-d"
,
strtotime
(
"+1 month"
)).
"
;
echo
"十年后:"
.
date
(
"Y-m-d"
,
strtotime
(
"+10 year"
)).
"
;
|
php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/**
* 功能:取得给定日期所在周的开始日期和结束日期
* 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
* $first 一周以星期一还是星期天开始,0为星期天,1为星期一
* 返回:数组array("开始日期", "结束日期");
*
*/
function
aweek(
$gdate
=
""
,
$first
= 0){
if
(!
$gdate
)
$gdate
=
date
(
"Y-m-d"
);
$w
=
date
(
"w"
,
strtotime
(
$gdate
));
//取得一周的第几天,星期天开始0-6
$dn
=
$w
?
$w
-
$first
: 6;
//要减去的天数
//本周开始日期
$st
=
date
(
"Y-m-d"
,
strtotime
(
"$gdate -"
.
$dn
.
" days"
));
//本周结束日期
$en
=
date
(
"Y-m-d"
,
strtotime
(
"$st +6 days"
));
//上周开始日期
$last_st
=
date
(
'Y-m-d'
,
strtotime
(
"$st - 7 days"
));
//上周结束日期
$last_en
=
date
(
'Y-m-d'
,
strtotime
(
"$st - 1 days"
));
return
array
(
$st
,
$en
,
$last_st
,
$last_en
);
//返回开始和结束日期
}
echo
implode(
"|"
, aweek(
""
, 1)).
'
;
//echo date("Y-m-d",strtotime("time()"));
echo
'本周第一天(星期日为一周开始):'
.
date
(
'Y-m-d'
, time()-86400*
date
(
'w'
)).
'
;
echo
'本周第一天(星期一为一周开始):'
.
date
(
'Y-m-d'
, time()-86400*
date
(
'w'
)+(
date
(
'w'
)>0?86400:-6*86400)).
'
;
echo
'本月第一天:'
.
date
(
'Y-m-d'
,
mktime
(0,0,0,
date
(
'm'
),1,
date
(
'Y'
))).
'
;
echo
'本月最后一天:'
.
date
(
'Y-m-d'
,
mktime
(0,0,0,
date
(
'm'
),
date
(
't'
),
date
(
'Y'
))).
'
;
//上个月的开始日期
$m
=
date
(
'Y-m-d'
,
mktime
(0,0,0,
date
(
'm'
)-1,1,
date
(
'Y'
)));
//上个月共多少天
$t
=
date
(
't'
,
strtotime
(
"$m"
));
echo
'上月第一天:'
.
date
(
'Y-m-d'
,
mktime
(0,0,0,
date
(
'm'
)-1,1,
date
(
'Y'
))).
'
;
echo
'上月最后一天:'
.
date
(
'Y-m-d'
,
mktime
(0,0,0,
date
(
'm'
)-1,
$t
,
date
(
'Y'
))).
'
;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
//PHP手册上有一个这个方法,用来返回指定日期的周一和周日
function
get_week_range(
$week
,
$year
){
$timestamp
=
mktime
(1,0,0,1,1,
$year
);
$firstday
=
date
(
"N"
,
$timestamp
);
if
(
$firstday
>4){
$firstweek
=
strtotime
(
'+'
.(8-
$firstday
).
' days'
,
$timestamp
);
}
else
{
$firstweek
=
strtotime
(
'-'
.(
$firstday
-1).
' days'
,
$timestamp
);
}
$monday
=
strtotime
(
'+'
.(
$week
- 1).
' week'
,
$firstweek
);
$sunday
=
strtotime
(
'+6 days'
,
$monday
);
$start
=
date
(
"Y-m-d"
,
$monday
);
$end
=
date
(
"Y-m-d"
,
$sunday
);
return
array
(
$start
,
$end
);
}
//strtotime获取本周第一天和最后一天方法的BUG
//PHP手册上有一个这个方法,用来返回指定日期的周一和周日
function
get_week_range2(
$week
,
$year
){
$timestamp
=
mktime
(1,0,0,1,1,
$year
);
$firstday
=
date
(
"N"
,
$timestamp
);
if
(
$firstday
>4){
$firstweek
=
strtotime
(
'+'
.(8-
$firstday
).
' days'
,
$timestamp
);
}
else
{
$firstweek
=
strtotime
(
'-'
.(
$firstday
-1).
' days'
,
$timestamp
);
}
$monday
=
strtotime
(
'+'
.(
$week
- 1).
' week'
,
$firstweek
);
$sunday
=
strtotime
(
'+6 days'
,
$monday
);
$start
=
date
(
"Y-m-d"
,
$monday
);
$end
=
date
(
"Y-m-d"
,
$sunday
);
return
array
(
$start
,
$end
);
}
|
但在跨年的时候使用会有问题
例如2011年的12月31日周六和2012年1月1日周日,拿到的周一和周日完全不同
2011年12月31日拿合到的周一和周日分别对应
2011-12-26
2012-01-01
但2012年1月1日拿 到的周一和周日分别对应
2012-01-02
2012-01-04
原因为传进去的方法的周为第53周,但是年为2011年,所以认为2011的第53周,所以计算有误,解决方法为,
如果周为大于10(因为一月个月不可能有10周),且月份为1的时候,将年减1处理
1
2
3
|
if
(
date
(
'm'
,
$last_week_time
) ==
'01'
and
$tmp_last_week
> 10){
$last_week_year
--;
}
|