如何减去 laravel 中时间输入的差值?
How to subtract and get difference between time inputs in laravel?
我正在 laravel 中构建一个小应用程序,该应用程序有一个日期和时间输入,我用它来计算给定任务的价格。我已经成功计算出日期差异,现在我正在尝试获取 PM 和 AM 格式的两个选定时间之间的差异,但我被卡住了。
我想要实现的是,当用户选择一个时间时,如下例所示;我得到以小时为单位的时差,如果是 3 小时或更多小时,我会给予一定的惩罚,请帮忙!
array:4 [▼
"pickup_date" => "2019-09-13"
"pickup_time" => "11:37 AM"
"dropoff_date" => "2019-09-14"
"dropoff_time" => "10:37 PM"
]
您可以使用 Cabon diff()
在 tinker 中会像
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.5 — cli) by Justin Hileman
>>> \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diff(\Carbon\Carbon::parse('20
19-09-11 10:23 PM'))
=> DateInterval {#3080
interval: - 1d 13:14:00.0,
}
>>>
您可以在您的代码中使用它。
小时差异
> \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diffInHours(\Carbon\Carbon::parse('2019-09-11 10:2
3 PM'))
=> 37
你的if条件可以是
$diff = \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diffInHours(\Carbon\Carbon::parse('2019-09-11 10:2
3 PM'));
然后
if ( $diff > 3 ) {
// do something
} else {
// do something else
}
你可以使用 diffInHours
同样的,
$pickUp = Carbon::createFromFormat('Y-m-d h:i A', '2019-09-13 11:37 AM');//->toDateTimeString();
$dropOff = Carbon::createFromFormat('Y-m-d h:i A', '2019-09-14 10:37 PM');//->toDateTimeString();
echo $dropOff->diffInHours($pickUp);//->format('%H'); // Output: 35
碳默认包含在laravel中,
在你的控制器中确保你导入碳
use Carbon\Carbon;
在具体的方法中你可以这样做:
$dropoff = Carbon::parse($request->dropoff_date .' '. $request->dropoff_time);
$pickup = Carbon::parse($request->pickup_date .' '. $request->pickup_time);
if($dropoff->diffInHours($pickup) > 3){
// penalty
}
// rest
Carbon docs中有更多详细信息
试试这个
$start_date = new DateTime('2012-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';
它将显示输出
总共 x 天
年
z 个月
一天
b小时
c分钟
d 秒
你可以比较差异秒数
$times = array(
"pickup_date" => "2019-09-13",
"pickup_time" => "11:37 AM",
"dropoff_date" => "2019-09-14",
"dropoff_time" => "10:37 PM"
);
$diff_in_seconds = strtotime($times["dropoff_date"] . " " . $times["dropoff_time"]) - strtotime($times["pickup_date"] . " " . $times["pickup_time"]);
if($diff_in_seconds > 10800){ // 3h -> 10800s
// do something
}
如果你不想使用Carbon
包,你可以使用下面的解决方案,这是procedural/functional方式,PHP也有面向对象的类来实现相同的。
$time = [
"pickup_date" => "2019-09-13",
"pickup_time" => "11:37 AM",
"dropoff_date" => "2019-09-14",
"dropoff_time" => "10:37 PM",
];
extract($time);
$pickup_datetime = date_create_from_format ( 'Y-m-d h:i a',$pickup_date.' '.$pickup_time);
$dropoff_datetime = date_create_from_format ( 'Y-m-d h:i a',$dropoff_date.' '.$dropoff_time);
$interval = date_diff($dropoff_datetime,$pickup_datetime);
$hours = date_interval_format($interval, '%h');
我正在 laravel 中构建一个小应用程序,该应用程序有一个日期和时间输入,我用它来计算给定任务的价格。我已经成功计算出日期差异,现在我正在尝试获取 PM 和 AM 格式的两个选定时间之间的差异,但我被卡住了。 我想要实现的是,当用户选择一个时间时,如下例所示;我得到以小时为单位的时差,如果是 3 小时或更多小时,我会给予一定的惩罚,请帮忙!
array:4 [▼
"pickup_date" => "2019-09-13"
"pickup_time" => "11:37 AM"
"dropoff_date" => "2019-09-14"
"dropoff_time" => "10:37 PM"
]
您可以使用 Cabon diff()
在 tinker 中会像
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.5 — cli) by Justin Hileman
>>> \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diff(\Carbon\Carbon::parse('20
19-09-11 10:23 PM'))
=> DateInterval {#3080
interval: - 1d 13:14:00.0,
}
>>>
您可以在您的代码中使用它。
小时差异
> \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diffInHours(\Carbon\Carbon::parse('2019-09-11 10:2
3 PM'))
=> 37
你的if条件可以是
$diff = \Carbon\Carbon::parse('2019-09-13 11:37 AM')->diffInHours(\Carbon\Carbon::parse('2019-09-11 10:2
3 PM'));
然后
if ( $diff > 3 ) {
// do something
} else {
// do something else
}
你可以使用 diffInHours
同样的,
$pickUp = Carbon::createFromFormat('Y-m-d h:i A', '2019-09-13 11:37 AM');//->toDateTimeString();
$dropOff = Carbon::createFromFormat('Y-m-d h:i A', '2019-09-14 10:37 PM');//->toDateTimeString();
echo $dropOff->diffInHours($pickUp);//->format('%H'); // Output: 35
碳默认包含在laravel中, 在你的控制器中确保你导入碳
use Carbon\Carbon;
在具体的方法中你可以这样做:
$dropoff = Carbon::parse($request->dropoff_date .' '. $request->dropoff_time);
$pickup = Carbon::parse($request->pickup_date .' '. $request->pickup_time);
if($dropoff->diffInHours($pickup) > 3){
// penalty
}
// rest
Carbon docs中有更多详细信息
试试这个
$start_date = new DateTime('2012-09-01 04:10:58');
$since_start = $start_date->diff(new DateTime('2012-09-11 10:25:00'));
echo $since_start->days.' days total<br>';
echo $since_start->y.' years<br>';
echo $since_start->m.' months<br>';
echo $since_start->d.' days<br>';
echo $since_start->h.' hours<br>';
echo $since_start->i.' minutes<br>';
echo $since_start->s.' seconds<br>';
它将显示输出 总共 x 天 年 z 个月 一天 b小时 c分钟 d 秒
你可以比较差异秒数
$times = array(
"pickup_date" => "2019-09-13",
"pickup_time" => "11:37 AM",
"dropoff_date" => "2019-09-14",
"dropoff_time" => "10:37 PM"
);
$diff_in_seconds = strtotime($times["dropoff_date"] . " " . $times["dropoff_time"]) - strtotime($times["pickup_date"] . " " . $times["pickup_time"]);
if($diff_in_seconds > 10800){ // 3h -> 10800s
// do something
}
如果你不想使用Carbon
包,你可以使用下面的解决方案,这是procedural/functional方式,PHP也有面向对象的类来实现相同的。
$time = [
"pickup_date" => "2019-09-13",
"pickup_time" => "11:37 AM",
"dropoff_date" => "2019-09-14",
"dropoff_time" => "10:37 PM",
];
extract($time);
$pickup_datetime = date_create_from_format ( 'Y-m-d h:i a',$pickup_date.' '.$pickup_time);
$dropoff_datetime = date_create_from_format ( 'Y-m-d h:i a',$dropoff_date.' '.$dropoff_time);
$interval = date_diff($dropoff_datetime,$pickup_datetime);
$hours = date_interval_format($interval, '%h');