2017年8月11号星期几?
这是日期字符串,要转换成标准时间,需要使用date()或者strtotime()等函数。 但是,如果仅仅是这样,那么无论题目如何变化,答案都是唯一的(假设时间区间限制在[1970-01-01 ,2038-01-01))。 但是,问题就是题目要求计算“四年一闰”之后的第一天的日期。也就是说,这4年的最后一天是周日,然后下一个周一就是闰日。
所以,如果我们把4年中的最后一天记作d,而把下一个星期一记作d+1,那么就有 d=m/4, d+1=m/4+3 如果这样简单地把“四年一闰”后的第一天转换为整型,那么就会出错——如果m是10的倍数,那么得到的d与d+1就会差两天;而如果m是11的倍数,那么得到的d就比d+1大一天……显然这是一种错误的情况。
正确的处理方法是把一年按照天数分为52个周,然后根据余数判断是哪一年。如果余数为0,那就是平年,如果为1,那就是闰年。
具体分法如下: 在上面式子中,n指的是年份末两位数字,例如17年是n=17,而2166年则是n=2166。 然后,再把每年的第一天作为基准点,将每周的第一天记作w,每一天记作d,这样时间就可以用序列{w,d}表示了。最后按照上面的公式计算出m的值就可以了。
当遇到闰年时,m除以4后需要添加3才是正确处理方式(注意:必须是4的整数倍+3),否则还会错。