【问题标题】:How to get 1st, 2nd, 3rd week format carbon laravel如何获得第一、第二、第三周格式碳 laravel
【发布时间】:2021-11-05 21:54:10
【问题描述】:

我需要从 CarbonPeriod 获取第 1、第 2、第 3 和第 4 周格式。我应该怎么做才能使它变成文本?

$carbonPeriod = CarbonPeriod::create($startDate, '1 week', $endDate);
            foreach ($carbonPeriod as $period) {
                $startPeriod = clone $period;
                $endPeriod = clone $period;
                $startRange = $parsedStartDate->gt($startPeriod->startOfWeek()) ? $startDate : $startPeriod->startOfWeek()->format('Y-m-d');
                $endRange = $parsedEndDate->lt($endPeriod->endOfWeek()) ? $endDate : $endPeriod->endOfWeek()->format('Y-m-d');
                $labels[] = $period->translatedFormat('F D Y'); //i need Jan 1st week 2021, Jan 2nd week 2021 and etc for the labels

            }

【问题讨论】:

  • 你能再澄清一点吗?您需要在$labels 中获得什么?您目前获得了什么?
  • 我需要图表标签 [“2021 年 1 月 1 日”、“2021 年 1 月 2 日”、“2021 年 1 月 3 日”、“2021 年 1 月 4 日”、“2021 年 2 月 1 日”、“ 2021 年 2 月 2 日"] 等基于范围

标签: laravel laravel-8 php-carbon


【解决方案1】:

如果我对您的理解正确,您希望在给定期间内的第几周。如果确实如此,那么您可以使用以下方法执行您需要的操作:

$locale = 'xxx'; //  Replace with your locale here
$nf = new NumberFormatter($locale, NumberFormatter::ORDINAL);
$carbonPeriod = CarbonPeriod::create($startDate, '1 week', $endDate);
foreach ($carbonPeriod as $i => $period) {
    $startPeriod = clone $period;
    $endPeriod = clone $period;
    $startRange = $parsedStartDate->gt($startPeriod->startOfWeek()) ? $startDate : $startPeriod->startOfWeek()->format('Y-m-d');
    $endRange = $parsedEndDate->lt($endPeriod->endOfWeek()) ? $endDate : $endPeriod->endOfWeek()->format('Y-m-d');
    $ordWeek = $nf->format($i);
    $labels[] = $period->translatedFormat('F')." $ordWeek". __("week")." ".$period->translatedFormat('Y'); // Should say "January 1st week 2021 
}

注意这需要intl extension

【讨论】:

    【解决方案2】:
    $CarbonPeriod = Carbon::now()->subDays(20);
        $today = Carbon::now();
        $weeks = intval(floor(($CarbonPeriod->diff($today)->days) / 7)) . 'st';
        
    

    结果“2st”

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    • @Community 为什么其他用户编辑我的答案^_^
    • @KyleK 您的编辑完全改变了答案,并且不是原作者打算回答的内容。编辑应该只根据作者的意图修正拼写错误/修正格式和阐明语言,而不是写出你自己的答案。
    • @KyleK 好的,我会记住的
    • OK @apokryfos 自己写的。重点是:使用 foreach 循环,我们实际上不需要计算 diff,因为我们可以使用 $index(周期已经是一周间隔),但是如果在其他情况下我们需要计算周数, 那么 diffInWeeks 比 diff()->days / 7 计算更合适,这里不需要 + intval()。
    【解决方案3】:
    $carbonPeriod = CarbonPeriod::create($startDate, '1 week', $endDate);
    
    foreach ($carbonPeriod as $index => $period) {
        $startPeriod = clone $period;
        $endPeriod = clone $period;
        $startRange = $parsedStartDate->gt($startPeriod->startOfWeek()) ? $startDate : $startPeriod->startOfWeek()->format('Y-m-d');
        $endRange = $parsedEndDate->lt($endPeriod->endOfWeek()) ? $endDate : $endPeriod->endOfWeek()->format('Y-m-d');
        $labels[] = $carbonPeriod->translate('ordinal', [':number' => $index + 1]);
    }
    

    【讨论】:

    • 它只是返回'序数'
    • try-carbon.herokuapp.com 中测试正常尝试在->translate 之前添加->locale('en') 你可能不是英文的。
    猜你喜欢
    • 2015-08-13
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2021-12-12
    • 2022-11-30
    • 2017-11-23
    相关资源
    最近更新 更多