如何在 PHP/Carbon 中添加一些时间?

问题描述 投票:0回答:2

我正在使用 Laravel 并拥有以下代码:

$date = now()->locale('es_ES');

$start_date = $date->isoFormat('D [de] MMMM [de] YYYY')
$start_time = $date->isoFormat('HH[H]hh')
$end_date =  $date->addHours(3)->isoFormat('D [de] MMMM [de] YYYY')
$end_time =  $date->addHours(3)->isoFormat('HH[H]hh')

这是输出

开始日期:2023 年 4 月 24 日 开始时间:21H09
结束日期:2023 年 4 月 25 日 结束时间:03H03

我希望结束日期和时间是这样的:

end_date:2023 年 4 月 25 日 结束时间:00H09

看起来增加了超过 3 小时,而且分钟数也不一样,这是怎么回事?谢谢

php date datetime-format php-carbon
2个回答
2
投票

我想你正在寻找这样的东西:

    $start = now()->locale('es_ES');
    $end = $start->copy()->addHours(3);
    
    $start_date = $start->isoFormat('D [de] MMMM [de] YYYY');
    $start_time = $start->isoFormat('HH[H]hh');
    $end_date = $end->isoFormat('D [de] MMMM [de] YYYY');
    $end_time = $end->isoFormat('HH[H]hh');

1
投票

如果你想要分钟,你需要

mm
而不是
hh
,那么你应该复制日期并只添加一次小时:

$date = now()->locale('es_ES');

$start_date = $date->isoFormat('D [de] MMMM [de] YYYY');
$start_time = $date->isoFormat('HH[H]mm');

$end = $date->copy()->addHours(3);

$end_date =  $end->isoFormat('D [de] MMMM [de] YYYY');
$end_time =  $end ->isoFormat('HH[H]mm');

(请注意,

now()
正在创建一个可变的
Carbon
对象,切换到
CarbonImmutable
以拥有不可变也是一个选项)

© www.soinside.com 2019 - 2024. All rights reserved.