Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何计算所有42天的日历日_Php_Date_Php Carbon - Fatal编程技术网

PHP:如何计算所有42天的日历日

PHP:如何计算所有42天的日历日,php,date,php-carbon,Php,Date,Php Carbon,换句话说,我们的目标是获得一系列的天数 ,开始日期和结束日期,就好像它是一个日历矩阵,包含42天,即当前月份的天数,以及上个月和下个月的天数。不需要呈现日历,只获取日期 例如,按照下面的图片 我需要输入一年中的某个月,并且需要得到这个天数范围,如图所示 使用PHP Carbon,我可以很容易地获得当前月份的天数,使用startOfMonth、endOfMonth、subMonth和addMonth 这样做,我得到了这3个月的每一天,但目标是能够过滤这些天,只显示与日历相等的间隔,但显然是动态的,

换句话说,我们的目标是获得一系列的天数 ,开始日期和结束日期,就好像它是一个日历矩阵,包含42天,即当前月份的天数,以及上个月和下个月的天数。不需要呈现日历,只获取日期

例如,按照下面的图片

我需要输入一年中的某个月,并且需要得到这个天数范围,如图所示

使用PHP Carbon,我可以很容易地获得当前月份的天数,使用startOfMonth、endOfMonth、subMonth和addMonth

这样做,我得到了这3个月的每一天,但目标是能够过滤这些天,只显示与日历相等的间隔,但显然是动态的,即如果我使用碳,将简单地通知所需的日期,并获得过滤范围,考虑到每个单元格的位置

$prev_start = Carbon::now()->subMonth()->startOfMonth();
$prev_end = Carbon::now()->subMonth()->endOfMonth();

$start = Carbon::now()->startOfMonth();
$end = Carbon::now()->endOfMonth();

$next_start = Carbon::now()->addMonth()->startOfMonth();
$next_end = Carbon::now()->addMonth()->endOfMonth();


下面是您可以做的:

$monthStart=Carbon::now->startOfMonth; $monthEnd=Carbon::now->endOfMonth; $calendarStart=$monthStart->startOfWeekCarbon::SUNDAY; $calendarEnd=$monthEnd->endOfWeekCarbon::SATURDAY; $calendarStart和$calendarEnd现在应该包含将在单个屏幕中显示的第一天和最后一天。这假设日历将展开显示的第一周和最后一周

如果您使用的日历始终显示42天,则您可以执行以下操作:

$monthStart=Carbon::now->startOfMonth; $calendarStart=$monthStart->startOfWeekCarbon::SUNDAY; $calendarEnd=$calendarStart->addDay42;
只要将1与它的日期对齐,那么其余的将神奇地适合汉克斯这么多。。。这就是我要找的。。。但是,如果我现在使用setTestNow进行更改,例如$knownDate=Carbon::create2019,7,20;碳::setTestNow$knownDate;使用不同的天数,我不会得到42天,而是35天34+1。如果我看2019年7月的日历,它从2019-06-30开始,到2019-08-10结束。当然,如果是34天,它可能会多加7天,但我不知道它是否是最正确的形式,或者它是否会有一个错误的结果。通过抽样,我认为这就足够了:if$diff<41{echo$calendarEnd->addDay7;}else{echo$calendarEnd;}如果你说的是windows日历,它似乎有固定的天数,那么你可以通过执行$calendarStart->addDay42来实现这一点。在所有情况下,结束似乎并不重要。对于像我这样使用旧版本碳的人,这里有一个提示。我使用的是1.39版,方法startOfWeek不接受参数。公共函数startOfWeek{while$this->dayOfWeek!==static::$weekStartsAt{$this->subDay;}返回$this->startOfWeek;}。由于此时我不想升级,所以有必要使用setWeekStartsAtCarbon::SUNDAY方法