PHP-当一周从星期一以外的其他日期开始时,获取给定周数的第一天

PHP-当一周从星期一以外的其他日期开始时,获取给定周数的第一天,php,calendar,strtotime,dayofweek,week-number,Php,Calendar,Strtotime,Dayofweek,Week Number,在我的PHP应用程序中,我有三个变量: 代码: $year = 2014 $weeknumber = 1 $weekstarts = 6 //Week starts on Saturday. 1=Monday... 6=Saturday and 7=Sunday 有了这三个参数,我想知道一周的第一天是什么。在这种情况下,2014年的第一周,即从周六开始的那一周,是12月28日。2014-01-04 从周一开始的几周里,我可以通过以下方式轻松解决这一问题: 代码: $first_day_of_w

在我的PHP应用程序中,我有三个变量:

代码:

$year = 2014
$weeknumber = 1
$weekstarts = 6 //Week starts on Saturday. 1=Monday... 6=Saturday and 7=Sunday
有了这三个参数,我想知道一周的第一天是什么。在这种情况下,2014年的第一周,即从周六开始的那一周,是12月28日。2014-01-04

从周一开始的几周里,我可以通过以下方式轻松解决这一问题:

代码:

$first_day_of_week = strtotime( $year . "W" . "0".$weeknumber)
但它在星期一以外的几天开始的几周内不起作用。

使用,其中第三个参数是星期几:

$dt=新日期时间;
echo$dt->setISODate(2014,1,0)->格式('Y-m-d'),“\n”;#0=星期日
echo$dt->setISODate(2014,1,1)->格式('Y-m-d'),“\n”;#1=星期一
echo$dt->setISODate(2014,1,6)->格式('Y-m-d'),“\n”;#6=星期六


您的示例不起作用,因为您使用的是默认为星期一的格式
yyyyWweek
,您将看到有一种格式
yyyy-Wweek-day
,您可以像这样使用:

$format=sprintf(“%d-W%02d-%d”),$year,$weeknumber,$weekstarts==7?0:$weekstarts);
每周的第一天=标准时间($格式);
echo“$format返回了$first\u day\u of \u week\n”;

很难说出你在问什么。你想知道某个特定日期的前一个星期六是什么吗?我们是在谈论实际的周数,还是仅仅是“无论今年第一周的日期从我的开始算起,都将是第一周”?@davethegr8你能提供你想法的实现吗?@Wrikken实际周数因此,第一周的星期六是2014-01-04。。这就引出了一个问题:如果我们改变开始的日期:我们应该前进,后退,还是一些自定义规则?谢谢你提到这个函数。但是,我在谷歌日历中看到,从2013年12月28日星期六开始的2014年第一周的第一天是2013年12月28日星期六,而不是1月4日星期六。@user2070775:2014年第一个ISO周从2013年12月30日开始。你说的是2013年的最后一个星期,从星期六开始到2013年12月28日。如果您希望从当前/选定的周数中获取上一周,则只需将周数减去1即可。正如我所说,你应该首先阅读ISO-8601所代表的内容,然后看看你的应用程序需要什么。Android 4.3的谷歌日历应用程序说,2014年的第一周,即从周六开始的那一周,是2013-12-28。也许他们没有遵循ISO标准