Carbon setTestNow 功能不起作用

阿米尔汗 |

我正在 Laravel 中处理日期。我必须为患者未来的注射设定日期。为简单起见,假设今天是 13-03-2019(星期三)。我将第一个日期创建为:

$firstDate = Carbon::create(2019,03 ,18, 12); // The day is Monday
// set date
Carbon::setTestNow($firstDate);

现在我希望接下来的两个约会应该在周三和周五。所以我再次将日期设置如下:

  // set second date
   $secondDate = new Carbon('Wednesday');
   Carbon::setTestNow($secondDate); 
   // set thirdDate
   $thirdDate = new Carbon('Friday');
   Carbon::setTestNow($thirdDate);

根据上面的例子,输出应该是:

  1. 2019-03-18
  2. 2019-03-20
  3. 2019-03-22

但问题是它输出第一个设置日期正确但打印第二个和第三个日期错误,因为它将下周的“星期三”视为今天的日期。所以输出打印为:

  1. 2019-03-18
  2. 2019-03-13
  3. 2019-03-14

我已经花了很多时间,如果你们中的任何人能帮助我,我将不胜感激。如果有人指导我哪里出错了,我将不胜感激。谢谢。

阿米尔汗 |

由于 setTestNow() 函数不适用于第二个和第三个日期/天,因此我首先获取所有三个必需的天数,然后将它们转换为返回天数的“dayOfWeek”(星期日 0、星期一 1 等......)。我从第二天和第三天减去第一天,然后最后将这些天添加到我从日期选择器获得的日期中。

      // set the start date
      if( $visitstart_date != null && $visitstart_date != '') {
           Carbon::setTestNow($visitstart_date);
      } else {
       Carbon::setTestNow(); 
     }

     if($perweek_visit1_day != '')
     {  
        //Get first selected day number
        $firstDay = Carbon::parse($perweek_visit1_day)->dayOfWeek;
        $perweek_visit1_dayDate = Carbon::now();
     }
     if($perweek_visit2_day != '')
     {  
        //Get second day numer
        $secondDay = Carbon::parse($perweek_visit2_day)->dayOfWeek - $firstDay;
        $perweek_visit2_dayDate = Carbon::now()->addDays($secondDay);
      }
     if($perweek_visit3_day != '')
     {  
        //Get third day number
        $thirdDay = Carbon::parse($perweek_visit3_day)->dayOfWeek - $firstDay;
        $perweek_visit3_dayDate = Carbon::now()->addDays($thirdDay);
     }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章