PHP中如何找到周、月或者年中的某一天
在PHP中我们可以找到一年中的某一天,或者某个星期,或者一周、一个月中的某一天。例如,我们利用PHP在每个星期一或者每个月的第一天输出特别的信息。
在date()或strftime()函数中使用适当的参数即可找到周、月及年中的某一天,如下代码所示:
<?php
print strftime("Today is day %d of the month and %j of the year.");
print 'Today is day '.date('d').' of the month and '.date('z').' of the year.';
?>
函数date()和strftime()的运算机制并不相同。对于date()来说,一年的第一天用0表示,而strftime()则用1来表示一年中的第一天。下表包含了date()和strftime()函数能够理解的所有日和周的数值格式字符。
Type strftime() date() Description Range Windows
Day %d d 一月中的第几天,数字 01-31 是
Day %e 一月中的第几天,数字。
一位数字前会加上一个空格 1-31 否
Day %j z 一年中的第几天,数字 001-366 for
strftime();
0-365 for date() 是
Day %u N 一周中的第几天,数字
(1表示周一) 1-7 否
Day %w w 一周中的第几天,
(0表示周日) 0-6 是
Day j 一月中的第几天,数字。
无前导零 1-31 否
Day S 一月中第几天的英文后缀文本 否
Week %a D 简写的周名,当前地区的文本形式 是
Week %A l 完整的周名,当前地区的文本形式 是
Week %U 一年中的第几周,数字。
第一周的周日是该周第一天 00-53 是
Week %V W ISO 8601:1988标准规定的
一年中第几周,数字。周1
表示一年中的第一周,该周
至少有4天位于当年中。周一
是该周的第一天 01-53 否
Week %W 一年中的第几周,数字。周一
是第一周的第一天 00-53 是
要想只在周一的时候输出一些信息,可以在date()函数中使用格式化字符w或者在strftime()函数中使用%w字符串,如下例所示。
<?php
if (1 == date('w')) {
print "Welcome to the beginning of your work week.";
}
if (1 == strftime('%w')) {
print "Only 4 more days until the weekend!";
}
可以用不同的方式来计算周的数值和一周中某一天的数值,所以在选择适当的方法时必须谨慎一些。ISO标准(ISO8601)中规定,每周以周一作为第一天,而且每周中的7天用数字1(周一)-7(周日)来表示。数字1所表示的那一周是指一年中第一个带有周二的那一周。也就是说,一年中的第一周必须有多数天属于这一年。而表示一年中周的范围是从01-53。
另一种表示周的标准范围是从00-53,在这种标准下,一年中的第53周潜在地会与下一年的第00周中的某些天重合。
只要你在自己的程序中保持前后使用的方法和标准一致,就不会有问题,但是当你的程序需要同其他PHP程序或者数据库相互操作时,则必须当心一些。例如,MySQL的DAYOFWEEK()函数将周日作为一周中的第一天,但表示周几的数值也是1~7,而且这也是ODBC的标准。然而,其WEEKDAY()函数,却将周一作为每周的第一天,而周几对应的数字值却是0~6。其WEEK()函数可以让你来选择一周的第一天是周日还是周一,但这个函数却与ISO标准不兼容。