从给定日期(包括时间)开始,获取下一个星期一的日期(PHP)

6
我想要查询指定日期后的下一个星期四,比如说2014-02-25。现在我的问题是使用下面的代码时,时间好像被抹掉了。
<?php
    $timestamp = '2014-02-25 10:30:00';

    echo date('Y-m-d H:i:s', strtotime("next Thursday", strtotime($timestamp)));
?>

我得到的结果是2014-02-27 00:00:00,但我想要的是2014-02-27 10:30:00。这里是否有我忽略的东西导致时间被设置为午夜?感谢您的帮助。

1
下一个星期四是从10:30开始还是从00:00开始? - kero
@kingkero 我真的分不清那是讽刺还是认真的... 你有什么想法来维护时间吗? - What have you tried
1
这是正确的。星期四从午夜开始。 - Gavin
@你尝试过吗 说是26.02.22:00,下一个星期四是在2小时后还是24小时后呢? - kero
@Whathaveyoutried:假设时间戳显示为上午10:30,但下周四意味着你已经进入了夏令时。你希望结果的时间是10:30am(保持挂钟时间)还是11:30am(保持绝对时间)? - Jon
显示剩余2条评论
1个回答

9

没有一种时间格式可以直接表示这个。你需要制定一个格式,比如:

next Thursday 10:30:00

...手动提取时间信息并将其传递给strtotime()函数。需要从参考时间字符串中提取时间信息,例如:

$refdate = '2014-02-25 10:30:00';
$timestamp = strtotime($refdate);

echo date('Y-m-d H:i:s',
    strtotime("next Thursday " . date('H:i:s', $timestamp), $timestamp)
);

使用字符串拼接也可以达到相同的结果:

echo date('Y-m-d', strtotime("next Thursday", $timestamp)
    . ' ' . date('H:i:s', $timestamp);

所谓的相对时间格式文档可以在这里找到。


嘿,谢谢你的回答。测试后,我得到了与我的原始代码相同的响应,即27日午夜。我要寻找的结果是27日的10:30。有可能发生吗? - What have you tried
好的,明白了。 :) .. 让我检查一下 - hek2mgl
非常好,谢谢。你能给我指一些关于上述内容的文档吗?我整天都在阅读strtotime的相关资料,但是没有看到像你在答案中那样进行连接的方法。我指的是你将时间连接到“下周四”的方式。 - What have you tried
1
已添加。您所指的术语称为“相对时间格式”。 - hek2mgl

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