Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期范围为人类字符串_Php_Date_Php Carbon - Fatal编程技术网

Php 日期范围为人类字符串

Php 日期范围为人类字符串,php,date,php-carbon,Php,Date,Php Carbon,我有一个日历系统,因此事件有一个开始和一个结束日期。与任何日历一样,结束日期是可选的,也可以与开始日期相同,但时间不同 因此,根据日期,有多种组合可供人类显示(如谷歌日历或苹果日历等): 2019年1月1日 2019年1月1日08:12 2019年1月1日08:12至11:45 2019年1月1日至2019年2月3日 2019年1月1日10:15至2019年2月3日18:20 等 Php Carbon中有内置的方法来实现这一点吗?我只找到格式化一个日期的方法,而不是间隔/期间。谢谢如果我正确

我有一个日历系统,因此事件有一个
开始
和一个
结束
日期。与任何日历一样,
结束
日期是可选的,也可以与
开始
日期相同,但时间不同

因此,根据日期,有多种组合可供人类显示(如谷歌日历或苹果日历等):

  • 2019年1月1日
  • 2019年1月1日08:12
  • 2019年1月1日08:12至11:45
  • 2019年1月1日至2019年2月3日
  • 2019年1月1日10:15至2019年2月3日18:20

Php Carbon中有内置的方法来实现这一点吗?我只找到格式化一个日期的方法,而不是间隔/期间。谢谢

如果我正确理解了你的问题,你可以这样做:

$period = CarbonPeriod::create($start, $end);
然后,您可以迭代周期,并使用它执行任何您想要的操作


这是在碳1.29中添加的,请参阅以下代码

printf("Right now is %s", Carbon::now()->toDateTimeString());
printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); // automatically converted to string
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();

// Carbon embed 824 languages:
echo $tomorrow->locale('fr')->isoFormat('dddd, MMMM Do YYYY, h:mm');
echo $tomorrow->locale('ar')->isoFormat('dddd, MMMM Do YYYY, h:mm');

$officialDate = Carbon::now()->toRfc2822String();

$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;

$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');

$internetWillBlowUpOn = Carbon::create(2038, 01, 19, 3, 14, 7, 'GMT');

if (Carbon::now()->isWeekend()) {
    echo 'Party!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'

我理解这个问题,因此应该简单地将差异格式化:

$start = new Carbon('1 jan 2019 08:12');
$end = new Carbon('today');

echo $start->diffForHumans($end);
//10 months before

为什么不干脆
$start->format(…)。'到'去'$结束->格式(…)
?因为您可以有一个相同的开始和结束日期,但时间不同,并且您将拥有2019年1月1日08:12至11:45的
。现在我使用一个自定义方法来执行所有这些检查,但我想知道是否有一种内置的方式让我错过了足够的时间,但我在文档中没有看到任何这样的东西。我倾向于像你一样写包装纸。这可能是目前唯一的好办法。