【问题标题】:How to add day of week name from daterange period如何从日期范围内添加星期几名称
【发布时间】:2018-06-29 16:54:11
【问题描述】:

我正在使用 Laravel 和 Carbon。

我创建了一个函数来添加“可用性”,例如:

public function createAvailability(Request $request) {
    $availability = new Availability($request->all());
    $availability->save();

    return Redirect::back();
}

我发送“开始”和“结束”数据来请求,所以示例数据是:$request->start = '01/07/2018'; $request->end= '22/07/2018';

现在我插入数据库数据,例如:

我想做的是在数据库中插入数据,例如:

所以在前 7 天,我想插入具有相同“开始”和“结束”数据的名称...或者如果开始日期是 01/07 并且结束日期是 03/07 我只想插入 3带有星期几名称的日子...

我该怎么做?

这也是我的带保护日期的可用性类:

class Availability extends Model
{

    protected $dates = [ 'start','end' ];

    public function setStartAttribute($date) {
        $this->attributes['start']= Carbon::createFromFormat('d/m/Y', $date);
    }

    public function getStartAttribute($date){
        return (new Carbon($date))->format('d-m-Y');
    }

    public function setEndAttribute($date) {
        $this->attributes['end']= Carbon::createFromFormat('d/m/Y', $date);
    }

    public function getEndAttribute($date){
        return (new Carbon($date))->format('d-m-Y');
    }
}

【问题讨论】:

  • 您是否有理由希望在数据库中使用它?当您检索记录时,您可以轻松地从 Carbon 获取星期几,并且可能需要较少的写作。
  • 是的,这是有原因的......我需要它在数据库中

标签: php laravel date date-range php-carbon


【解决方案1】:

我想这可能是你想要的

function days($start, $end){
  $current = strtotime($start);
  $end = strtotime($end);
  while($current <= $end && $current <= ($current * 7))){ // go until the last day or seven days, whichever comes first
    $day = date("l", $current);
    $availability = new Availability();
    $availability->start_date = date('d/m/Y', $current);
    $availability->end_date = date('d/m/Y', $end);
    $availability->day_of_week = date("l", $current);
    $availability->save();
    $current = $current + 86400;
}
days($request->input('start'), $request->input('end'));   

【讨论】:

  • 你能从上面的 /createAvailability 更新我的功能吗?
  • 对不起,这不是我所期望的......我知道如何在表中添加日期名称 - 我需要做的是在数据库中添加 7x 但如果有 3 天的时差然后添加从第一个日期日期名称开始仅 3 天
  • 抱歉,您的问题还不清楚。在上面的图片中,您有一周中每一天的条目,其中 6 个条目的开始日期和结束日期与一周中的日期不匹配。您的意思是在开始到结束日期的时间跨度中的每一天,您都需要一个单独的条目吗?听起来您需要进行一些解析以获取时间跨度有多长,然后根据此生成日期。我认为这里的任何人都不应该负责编写一个为您完成所有这些工作的方法。我暗示将使用 strtotime() 转换日期来进行计算。
  • 是的,对于日期之间的每个日期,但最多 7 个需要添加带有日期名称的条目
  • 我写了这个函数:$i = 0; for($date = $start; $date->lte($end); $date->addDay()) { $dates[] = $date->format('l'); $i++;如果 ($i == 7) { 休息; } }
猜你喜欢
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
相关资源
最近更新 更多