【问题标题】:Carbon checking hours碳检查时间
【发布时间】:2020-10-16 08:28:53
【问题描述】:

我有功能

public static function isRestaurantOpen($RestaurantID)
{
    $hours = settings_hours::all();
    $restaurant = [];
    foreach ($hours as $hour) {
        if ($hour->place_id == $RestaurantID) {
            $restaurant = $hour;
        }
    }


    if(!$restaurant) return "Time not set";
    
    $opening_hours = $restaurant->opening_hours;


    $date = date_create_from_format('Y-m-d', date('Y-m-d', time())); //get date
    $day = strtolower(date_format($date, 'l')); //get day of date

    
    $now = Carbon::now()->addHours(2); //im added this because i have wrong time on the server
    $start = Carbon::createFromTimeString($opening_hours[$day]['from']); //from hour
    $end = Carbon::createFromTimeString($opening_hours[$day]['to']); //to hour

    if ($now->between($start, $end)) {
        return "Open"; 
    } else {
        return "Close";
    }
}

但如果以 24 小时格式比较时间,此功能将无法正常工作。 任何人都可以帮助我吗?谢谢:)

【问题讨论】:

标签: laravel time php-carbon


【解决方案1】:

听起来你已经定义了每天的营业时间,这正是 Carbon 文档中提到的业务时间混合的目的:

https://github.com/kylekatarnls/business-time

这很可能会为您完成这项工作。

【讨论】:

    【解决方案2】:

    好的,我在另一个问题中找到了函数,这个函数运行良好

    public static function isNowBetweenTimes($timezone, $startDateTime, $endDateTime) {
        $curTimeLocal = Carbon::now($timezone);
        $startTime = $curTimeLocal->copy();
        $startTime->hour = $startDateTime->hour;
        $startTime->minute = $startDateTime->minute;
        $endTime = $curTimeLocal->copy();
        $endTime->hour = $endDateTime->hour;
        $endTime->minute = $endDateTime->minute;
        if ($endTime->lessThan($startTime))
            $endTime->addDay();
    
        return ($curTimeLocal->isBetween($startTime, $endTime));
    }
    

    【讨论】:

      【解决方案3】:

      当你想添加超过一个小时时,你应该使用 addHours 'with s' 而不是 addHour ...

          $now = Carbon::now()->addHours(2);
          $start = Carbon::parse($opening_hours[$day]['from']);
          $end = Carbon::parse($opening_hours[$day]['to']);
      

      现在这段代码应该可以工作了:

       if ($now->between($start, $end)) {
              return "Open"; 
          } else {
              return "Close";
          }
      

      【讨论】:

      • 仍然不工作 :( 例如,如果我从上午 08:00 到下午 01:00 有几个小时,则表明它已关闭
      • 我已经测试过了,它工作得很好,也许你应该从 $now = Carbon::now()->addHours(2) 中删除 ->addHours(2);
      • 我删除了 addhours,仍然无法正常工作,根据现在的时间进行测试:2020-06-25 20:41:42.360117 UTC (+00:00) 从小时:2020-06-25 11 :00:00.0 UTC (+00:00) 到小时:2020-06-25 01:00:00.0 UTC (+00:00) 并且结果关闭
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2017-05-20
      • 2015-02-28
      • 1970-01-01
      • 2018-03-14
      • 2018-03-16
      相关资源
      最近更新 更多