是否有解决方案可以找到特定周数的开始日期和结束日期。例如:
如果我输入$ week = 5,我想得到2016-03-28 - 2016-04-03。我只需要今年。
答案 0 :(得分:1)
static void Main(string[] args) {
Work("Hi!");
}
private static void Work(String p1) {
Work(p1, null, null);
}
private static void Work(String p1, String p2) {
Work(p1, p2, null);
}
private static void Work(String p1, String p2, String p3) {
if ( String.IsNullOrWhiteSpace(p2) ) p2 = String.Empty;
if ( String.IsNullOrWhiteSpace(p3) ) p3 = String.Empty;
Console.WriteLine(String.Concat(p1, p2, p3));
}
2016年1月1日星期五
2016年1月3日星期日
作为一些验证功能。如果上周进入下一年,这个版本甚至可以保持一年中的最后一周,就像第一周一样。如果周不在一年内,则返回false:
<?php
$year = 2016;
$week = 1;
$a = strtotime('January 1 ' . $year);
$b = date('N', $a) - 1;
$c = $a;
$a += (7 - $b) * 86400;
if($week > 1) {
$start = $a + (($week - 2) * 604800);
$end = $start + ($b ? 518400 : 604800);
}
else {
$start = $c;
$end = $a - 86400;
}
echo date('l jS \of F Y', $start);
echo '<br />';
echo date('l jS \of F Y', $end);
2016年3月28日星期一
2016年4月3日星期日
答案 1 :(得分:0)
您可以使用PHP相对日期时间函数(http://php.net/manual/en/datetime.formats.relative.php),如:
//date_default_timezone_set('Europe/Amsterdam');
$date = new DateTime();
$date->modify('2016W5'); //First day of week 5 of 2016
$date->modify('2016W5 +6 days'); //Last day of week 5 of 2016
或建立自己的功能:
function week_start_date($wk_num, $yr, $first = 1, $format = 'F d, Y')
{
$wk_ts = strtotime('+' . $wk_num . ' weeks', strtotime($yr . '0101'));
$mon_ts = strtotime('-' . date('w', $wk_ts) + $first . ' days', $wk_ts);
return date($format, $mon_ts);
}
$sStartDate = week_start_date($week_number, $year);
$sEndDate = date('F d, Y', strtotime('+6 days', strtotime($sStartDate)));
答案 2 :(得分:0)
您可以使用DateTime执行此操作:
$year = 2016;
$week = 13;
$date = new DateTime();
$date->setISODate($year, $week);
$start = $date->format('Y-m-d');
$end = $date->modify('+6 days')->format('Y-m-d');
echo 'Week start: '. $start , "\n"; // 2016-03-28
echo 'Week end: '. $end , "\n"; // 2016-04-03
答案 3 :(得分:0)
如果我输入$ week = 5,我想获得2016-03-28 - 2016-04-03。
所以,我想你想要在星期五和星期五的星期五进行游行。
为了获得这个,我创建了一个简单的函数,需要一个日期字符串(YYYY-MM-DD)和周数。该函数从给定字符串创建DateTime
对象,然后在每月的第一天修改它,然后检索日期周的第一天并添加$week
-1周。在这一点上,我们有所需周的第一天(星期一)。我们将此日期克隆到$end
,然后我们将其添加到6天。
函数返回一个对象,其中$start
和$end
个日期作为属性,获取了由compact()
创建的数组:
function monthWeek( $date, $week )
{
$start = new DateTime( $date );
$start->modify( 'first day of this month' );
$start->modify( '-'.($start->format( 'w' )-1).' days' );
$start->modify( '+'.($week-1).' weeks' );
$end = clone $start;
$end->modify( '+6 days' );
return (object) compact( 'start', 'end' );
}
在3月的休闲日召唤上述功能:
$week = monthWeek( '2016-03-25', 5 );
echo $week->start->format( 'l, Y-m-d' );
echo " => ";
echo $week->end->format( 'l, Y-m-d' );
我们得到了这个:
Monday, 2016-03-28 => Sunday, 2016-04-03
您也可以使用该功能检索基于年份的周,使用1月的一天作为第一个参数:
$week = monthWeek( '2016-01-25', 14 );
echo $week->start->format( 'l, Y-m-d' );
echo " => ";
echo $week->end->format( 'l, Y-m-d' );
将输出:
Monday, 2016-03-28 => Sunday, 2016-04-03
的 phpFiddle demo 强>