我有一个简单的情况,我有一个用户提供了第 X 周,我需要找出该周的星期一日期(例如 12 月 12 日)。我将如何实现这一目标?我知道年和周。
问问题
3890 次
5 回答
8
一些代码主要基于之前的提议:
$predefinedYear = 2009;
$predefinedWeeks = 47;
// find first mоnday of the year
$firstMon = strtotime("mon jan {$predefinedYear}");
// calculate how much weeks to add
$weeksOffset = $predefinedWeeks - date('W', $firstMon);
// calculate searched monday
$searchedMon = strtotime("+{$weeksOffset} week " . date('Y-m-d', $firstMon));
于 2009-11-16T15:01:30.263 回答
1
一个让你开始的想法:
- 取一年的第一天
- 添加 7 * X 天
- 使用 strtodate,传入“上周一”和上面计算的日期。
可能需要在上面增加一天。
根据您计算周数的方式和一周的开始,这有时可能会出现。(即如果一年中第一周的星期一实际上是上一年!)
彻底测试 - 但我过去曾使用类似的方法进行类似的计算。
于 2009-11-16T12:18:21.120 回答
0
由于声誉限制,我无法发布多个链接以进行详细检查
http://php.net/manual/en/function.date.php和http://php.net/manual/en/function.mktime.php
你可以使用这样的东西:使用 mktime 来获取一周的时间戳:$stamp = mktime(0,0,0,0,<7*x>,) {几年前使用过类似的东西,所以我不确定它是否像这样工作},然后使用 $wDay = date('N',$stamp)。您现在有了星期几,星期一的时间戳应该是
mktime(0,0,0,0,<7*x>-$wDay+1,) {'N' 参数返回 1 表示周一,6 表示周日}
希望这可以帮助
于 2009-11-16T12:40:30.830 回答
0
//To calculate 12 th Monday from this Monday(2014-04-07)
$n_monday=12;
$cur_mon=strtotime("next Monday");
for($i=1;$i<=$n_monday;$i++){
echo date('Y-m-d', $cur_mon);
$cur_mon=strtotime(date('Y-m-d', strtotime("next Monday",$cur_mon)));
}
输出
2014-04-07
2014-04-14
2014-04-21
2014-04-28
2014-05-05
2014-05-12
2014-05-19
2014-05-26
2014-06-02
2014-06-09
2014-06-16
2014-06-23
于 2014-04-03T14:46:58.633 回答
0
这将为您解决问题。它主要来自 Mihail Dimitrov 的回答,但在某种程度上简化和浓缩了这一点。如果您真的想要它,它可以是一个单线解决方案。
function getMondaysDate($year, $week) {
if (!is_numeric($year) || !is_numeric($week)) {
return null;
// or throw Exception, etc.
}
$timestamp = strtotime("+$week weeks Monday January $year");
$prettyDate = date('d M Y');
return $prettyDate;
}
几点注意事项:
- 如上所述,
strtotime("Monday January $year")
将为您提供一年中第一个星期一的时间戳。 - 如上所述 +X 周将使指定日期增加该周数。
您可以通过尝试验证这一点:
date('c',strtotime('Sunday Jan 2018'));
// "2018-01-07T00:00:00+11:00" (or whatever your timezone is)
date('c',strtotime('+1 weeks Sunday Jan 2018'));
// "2018-01-14T00:00:00+11:00" (or whatever your timezone is)
date('c',strtotime('+52 weeks Sunday Jan 2018'));
// "2019-01-06T00:00:00+11:00"
于 2018-07-12T02:05:25.960 回答