Laravel Carbon检查时间是否在同一分钟内

时间:2017-11-06 23:11:55

标签: php laravel datetime laravel-5

我有来自数据库的日期时间和来自input='time'字段的日期时间。

我有一个没有秒的日期时间(所以默认为00)和一个秒。我需要检查两个变量是否在同一分钟内。

示例:for True

Carbon {#349 ▼
  +"date": "2017-11-06 14:47:00.000000"
  +"timezone_type": 3
  +"timezone": "America/Chicago"
}
Carbon {#362 ▼
  +"date": "2017-11-06 14:47:44.000000"
  +"timezone_type": 3
  +"timezone": "America/Chicago"
}

示例:for False

Carbon {#349 ▼
  +"date": "2017-11-06 14:48:00.000000"
  +"timezone_type": 3
  +"timezone": "America/Chicago"
}
Carbon {#362 ▼
  +"date": "2017-11-06 14:47:44.000000"
  +"timezone_type": 3
  +"timezone": "America/Chicago"
}

我现在已经开始了,但它会在60秒内显示出来。如果它在同一分钟内显示,我很难显示。

$InsertTime = 2017-11-06 14:47
$DbTime = 2017-11-06 14:47:44


public function WithinMinCheck($InsertTime, $DbTime) {
   $WithinMin = "true";
   $InsertTime = Carbon::createFromFormat('Y-m-d H:i', $InsertTime);
   $DbTime = Carbon::createFromFormat('Y-m-d H:i:s', $DbTime);
   $difference = $InsertTime->diffInSeconds($DbTime);
   if ($difference >= 60) {
    $WithinMin = "false";
   } else {
    $WithinMin = "true";
   }

   return $WithinMin;
}

2 个答案:

答案 0 :(得分:2)

你能不能将第二个时间变量的第二个字段设置为0并比较这些值?

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(App.getContext()));

    Job job = dispatcher.newJobBuilder()
            .setLifetime(Lifetime.FOREVER)
            .setService(SearchService.class)
            .setTag("SearchService")
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(startDate,endDate))
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .build();

    dispatcher.mustSchedule(job);

请注意,上述解决方案仅在分钟值相同时才有效。如果第二次具有不同的分钟值,即使它在第一次的60秒内,它也将返回false。

答案 1 :(得分:1)

为什么不将日期作为字符串进行比较?这很简单。

$InsertTime = '2017-11-06 14:47';
$DbTime = '2017-11-06 14:47:44';

public function WithinMinCheck($InsertTime, $DbTime) {
   return (strpos($DbTime, $InsertTime) === 0);
}
相关问题