获取下一个星期一、星期二等日期

85

我想查找周一、周二、周三等的日期时间戳。如果这些天在本周还未到来,我希望日期返回本周的,否则返回下周的。谢谢!

10个回答

148

参见strtotime()

strtotime('next tuesday');

你可以通过查看周数来判断是否已经过了那一天:

$nextTuesday = strtotime('next tuesday');
$weekNo = date('W');
$weekNoNextTuesday = date('W', $nextTuesday);

if ($weekNoNextTuesday != $weekNo) {
    //past tuesday
}

谢谢!这非常有帮助。我只需要找出如何判断星期一是否已经到来了。那不会太难!谢谢! - Adrian Sarli

90

我知道这是有点晚了,但我想为以后的参考添加我的答案。

// Create a new DateTime object
$date = new DateTime();

// Modify the date it contains
$date->modify('next monday');

// Output
echo $date->format('Y-m-d');

好处是你也可以对其他日期执行此操作:

// Create a new DateTime object
$date = new DateTime('2006-05-20');

// Modify the date it contains
$date->modify('next monday');

// Output
echo $date->format('Y-m-d');

生成范围:

$monday = new DateTime('monday');

// clone start date
$endDate = clone $monday;

// Add 7 days to start date
$endDate->modify('+7 days');

// Increase with an interval of one day
$dateInterval = new DateInterval('P1D');

$dateRange = new DatePeriod($monday, $dateInterval, $endDate);

foreach ($dateRange as $day) {
    echo $day->format('Y-m-d')."<br />";
}

参考资料

PHP手册 - DateTime

PHP手册 - DateInterval

PHP手册 - DatePeriod

PHP手册 - clone


很棒的答案。需要更经常地开始使用DateTime。 - Chuck Le Butt

25

这个问题被标记为“php”,所以正如Tom所说,做到这一点的方法看起来是这样的:

date('Y-m-d', strtotime('next tuesday'));

7

由于某些原因,strtotime('next friday') 显示的是本周五的日期。请尝试使用以下代码:

//Current date 2020-02-03
$fridayNextWeek = date('Y-m-d', strtotime('friday next week'); //Outputs 2020-02-14

$nextFriday = date('Y-m-d', strtotime('next friday'); //Outputs 2020-02-07

我正在尝试在2020年2月14日使用“下周五”,它返回了2020年2月18日。看起来它工作正常。 - Naveen Saroye
1
是的,这是因为在这种情况下,“next friday”的意思是接下来要发生的那个星期五。在英语中,当我们说“next friday”时,我们倾向于指的是“下周五”,所以你从下周获取星期五的方法是正确的,尽管它不是“下一个”星期五。 - Warren Sergent

4

PHP 7.1:

$next_date = new DateTime('next Thursday');
$stamp = $next_date->getTimestamp();

PHP manual getTimestamp()


4
你可以使用Carbon库。
例如:下周五
Carbon::parse("friday next week");

如果星期五在同一周怎么办? - S. Farooq
例如,如果明天是星期五怎么办?操作员说,如果这一天还没有到来,我希望它是本周,否则下周。 谢谢,Farid - S. Farooq

1

如果我理解你的意思正确,你想要接下来7天的日期?

你可以这样做:

for ($i = 0; $i < 7; $i++)  
  echo date('d/m/y', time() + 86400 * $i);

请查看日期函数的文档以获取您想要的格式。

1

抱歉,我没有注意到PHP标签 - 但是其他人可能会对VB解决方案感兴趣:

Module Module1

    Sub Main()
        Dim d As Date = Now
        Dim nextFriday As Date = DateAdd(DateInterval.Weekday, DayOfWeek.Friday - d.DayOfWeek(), Now)
        Console.WriteLine("next friday is " & nextFriday)
        Console.ReadLine()
    End Sub

End Module

1
如果你想要找到星期一,那么“dayOfWeek”就是1。如果是星期二,则为2,以此类推。
var date=new Date();
getNextDayOfWeek(date, 2);

// 这是为了查找下周二

function getNextDayOfWeek(date, dayOfWeek) {
// Code to check that date and dayOfWeek are valid left as an exercise ;)

var resultDate = new Date(date.getTime());

resultDate.setDate(date.getDate() + (7 + dayOfWeek - date.getDay()) % 7);

return resultDate;
}

希望这对你有所帮助,谢谢。

0

PHP时间函数文档中展示了如何获取一周后的日期的示例。您可以将其修改为进入循环,最多迭代7次,每次获取时间戳,获取相应的日期,并从中获取星期几。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接