我认为这是可能的,但我想不出正确的算法。
我想要做的是:
如果今天是2009年2月2日星期一,我如何知道上周二的日期?使用相同的代码在之后2天,当前日期是2009年2月4日星期三,我会找到上周二相同的日期。
我认为这是可能的,但我想不出正确的算法。
我想要做的是:
如果今天是2009年2月2日星期一,我如何知道上周二的日期?使用相同的代码在之后2天,当前日期是2009年2月4日星期三,我会找到上周二相同的日期。
我知道已經有一個被接受的答案了,但依我之見,它並不符合所要求的第二個要求。在上述情況中,如果在星期三使用strtotime,則會產生昨天。因此,為了更精確,您仍需要檢查這一點:
$tuesday = strtotime( last Tuesday );
// check if we need to go back in time one more week
$tuesday = date( W , $tuesday)==date( W ) ? $tuesday-7*86400 : $tuesday;
正如Davil在他的评论中指出的那样,这有点是我的临时之计。由于夏令时,上述计算每年将偏移一个小时。好的解决方案是:
$tuesday = date( W , $tuesday)==date( W ) ? $tuesday-7*86400+7200 : $tuesday;
如果您需要时间为0:00小时,当然需要额外的努力。
大多数回答要么太多了,要么在技术上是不正确的,因为“上个星期二”不一定是上周的星期二,它只是指上一个星期二,它可能在“现在”的同一周内。
答案正确。
strtotime( tuesday last week )
工作方案:
$z = date("Y-m-d", strtotime("last Saturday"));
$z = (date( W , strtotime($z)) == date( W )) ? (strtotime($z)-7*86400+7200) : strtotime($z);
print date("Y-m-d", $z);
不要使用手动计算,改用 DateTime 对象。它具有正确的实现,考虑了闰年、秒等因素。
$today = new DateTime();
$today->modify( tuesday last week );
修改方法相对于它的状态修改日期,因此如果您将日期设置为不同的日期,它会计算相对于它的日期。
$date = new DateTime( 2020-01-01 );
echo $date->format( Y-m-d ); // 2020-01-01
$date->modify( tuesday last week );
echo $date->format( Y-m-d ); // 2019-12-24
you forgot strtotime for second argument of date( W , $tuesday) hmm.
将 $tuesday 转换为时间戳,时间戳为 "$tuesday-7*86400+7200" 前面的部分。
I'm sorry, "mde" does not have a meaning in English. Could you please provide more context or information?
// test: find last date for each day of the week
foreach (array( Mon , Tue , Wed , Thu , Fri , Sat , Sun ) as $day) {
print $day . " => " . date( m/d/Y , last_dayofweek($day)) . "
";
}
function last_dayofweek($day)
{
// return timestamp of last Monday...Friday
// will return today if today is the requested weekday
$day = strtolower(substr($day, 0, 3));
if (strtolower(date( D )) == $day)
return strtotime("today");
else
return strtotime("last {$day}");
}
<?php
$currentDay = date( D );
echo "Today-".$today = date("Y-m-d");
echo "Yesterday-".$yesterday = date("Y-m-d",strtotime( yesterday ));
echo "Same day last week-".$same_day_last_week = date("Y-m-d",strtotime( last .$currentDay));
?>