例如,PHP Date就是一些很棒的东西,比如+1 year.然而,我让自己陷入了一片混乱.我有三次约会,时间跨度为两个月,我想做一根优雅的绳子 "2月28日、2月29日和3月1日",来自表格YYYYMMDD中包含3个日期的array.日期的确切数量未知,最少1个,可能最多4个

除了一些相当曲折的str_replace操作,我如何从输出到我想要的格式?

注:不超过2个月,可能在一个月内.

$dates_array = ['20240228', '20240229', '20240301'];

foreach ($dates_array as $date) :
  $datetimes[]  = new DateTime($date);
endforeach;

// print_r($datetimes);

foreach ($datetimes as $key=>$date) :
  $month = $date->format('F');
  $day = $date->format('j');                                    
  $date_array[]= $day." ".$month." & ";
endforeach;

$date_string =  join( ' ', $date_array ) ;

echo $date_string;

// 28 February & 29 February & 1 March & 

推荐答案

我设法创造了这个:

$dates = ['20240228', '20240229', '20240301'];

function formatDates(array $datesInput) {
    foreach ($datesInput as $datesKey => $date) {
        $date  = new DateTime($date);
        $month = $date->format('F');
        $day   = $date->format('j');
        if ($datesKey == 0) {
            $datesOutput = $day;
        } elseif ($currentMonth <> $month) {
            $datesOutput .= " $currentMonth & $day";
        } else {
            $datesOutput .= ", $day";
        }
        $currentMonth = $month;
    }
    return "$datesOutput $month";
}

echo formatDates($dates);

这将返回:

28, 29 February & 1 March

这并不是那么复杂.然而,我确实把所有东西都放在一个函数中,因为否则我必须创建相当多的全局变量,那就是seen as bad practice个.

有关演示,请参阅:https://3v4l.org/gUWih

Php相关问答推荐

按制造商、型号和年份范围判断数据的存在性

使用PHP阅读XML提要

为什么正则表达式与得到的文本块之前得到的也行?

如何在laravel中使用script type= text/html/script

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

允许客户定义特定WooCommerce产品的价格

哪里的表现能更好?

在个人资料页面上显示个人资料图像

在WooCommerce中只允许高价产品的BACS付款

Shopware 6 插件:如何删除布尔配置并将其迁移到多选配置

在 Woocommerce 邮箱订单中显示产品 GTIN

如何显示所有数组数据而不仅仅是最后的结果

正则表达式将文本替换为标签 html 以字符开头

将 WooCommerce 0 销售价格替换为自定义文本,并保留常规价格删除线

根据所选付款方式启用/禁用 WooCommerce 所需的 checkout 字段

为WooCommerce中的运输方式ID设置必填的 checkout 订单备注字段

如何使用相同的变量使函数参数对于数组和字符串都是可选的

从 d-m-Y 日期格式 laravel 计算月份 = 01 的列的总和

服务器发送的事件:EventSource 抛出 MIME 错误

如何在 Laravel 中保存多对多