在我的申请中,一周是从星期一凌晨12:00:00到星期日晚上11:59:59定义的
每当用户访问我的网站时,我都需要查找前几周的日期范围,并根据该结果显示结果。这听起来很简单,但我迷路了。
为您提供方案 - - 3月1日星期一12:00:00至3月7日星期日12:59:59 PM是一周。
现在,当用户在3月8日或3月10日或3月12日访问网站时 - 根据当前日期,我应该可以获得上一周的日期范围,即开始日期3月1日和结束日期3月7日。
但如果用户访问网站时说的是3月16日 - 我需要的日期范围是3月8日到3月15日。
我如何在PHP中执行此操作。 感谢
答案 0 :(得分:8)
您可以尝试使用时间戳,但这会因时区更改而变得混乱(例如,CET - > CEST)。我会使用DateTime
类:
$d = new DateTime();
$weekday = $d->format('w');
$diff = 7 + ($weekday == 0 ? 6 : $weekday - 1); // Monday=0, Sunday=6
$d->modify("-$diff day");
echo $d->format('Y-m-d') . ' - ';
$d->modify('+6 day');
echo $d->format('Y-m-d');
答案 1 :(得分:8)
strtotime
功能非常方便:
$mondayStr = "last monday";
if (date('N') !== '1') { // it's not Monday today
$mondayStr .= " last week";
}
$monday = strtotime($mondayStr);
echo date('r', $monday); // Mon, 22 Feb 2010 00:00:00 +1000
$sunday = strtotime('next monday', $monday) - 1;
echo date('r', $sunday); // Sun, 28 Feb 2010 23:59:59 +1000
答案 2 :(得分:1)
function get_week_start($year, $month, $day)
{
$timestamp = mktime(0, 0, 0, $month, $day, $year);
return date('F j Y', $timestamp = mktime(0, 0, 0, $month, date('d', $timestamp)-date('w', $timestamp), $year));
}
您可以添加接下来的6天,然后就可以了。
答案 3 :(得分:1)
PHP Documentation中有一个用户功能。
答案 4 :(得分:0)
GMT版
$prev_monday_t = time() - (gmdate('N') + 6) * 86400;
$prev_sunday_t = time() - gmdate('N') * 86400;
echo gmdate('Y-m-d H:i:s', $prev_monday_t ).' '.gmdate('Y-m-d H:i:s', $prev_sunday_t );
本地版
$prev_monday_t = time() - (date('N') + 6) * 86400;
$prev_sunday_t = time() - date('N') * 86400;
echo date('Y-m-d H:i:s', $prev_monday_t ).' '.date('Y-m-d H:i:s', $prev_sunday_t );