Gabungkan tarikh berturut-turut dalam rentetan tarikh
P粉946336138
P粉946336138 2024-02-04 08:58:08
0
1
519

Saya mempunyai rentetan dengan tarikh yang dipisahkan dengan koma dan saya ingin mengira jika mana-mana tarikh tunggal disambungkan.

Jadi senarainya mungkin:

2022-07-15, 2022-07-16, 2022-07-17, 2022-07-18, 2022-07-22, 2022-07-25, 2022-07-26, 2022-07-27, 2022-07-28

Apa yang saya ingin capai ialah saya mendapat selang tarikh "bercantum" dan kemudian "secara individu" mendapat tarikh "single" seperti ini:

0 => 2022-07-15 - 2022-07-18
1 => 2022-07-22
2 => 2022-07-25 - 2022-07-28

Adakah mungkin untuk mengira dari rentetan ke output dengan beberapa letupan dan menggelungkan tarikh entah bagaimana?

P粉946336138
P粉946336138

membalas semua(1)
P粉057869348

Ya, anda boleh:

  • Belah tali kepada bahagian tali kurma
  • Isih senarai ini. Memandangkan formatnya ialah YYYY-MM-DD, susunan leksikal lalai adalah baik.
  • Lelaran atas senarai dan entri dikumpulkan dalam sub-baris apabila ia mewakili tarikh berturut-turut. Gunakan strtotime($date . ' + 1 day') untuk mengira tarikh seterusnya dan sahkan bahawa tarikh seterusnya dalam tatasusunan yang diisih sepadan dengannya. Jika ia sepadan dengan tarikh yang dijangkakan, jadikan ia masukan kedua dalam subarray semasa. Jika tiada padanan, mulakan sub-array baharu,...dan seterusnya
  • Akhirnya tukar sub-tatasusunan ini ke dalam format rentetan yang anda perlukan.
function groupDates($input) {
    $arr = explode(", ", $input);
    sort($arr);
    $expected = -1;
    foreach ($arr as $date) {
        if (strtotime($date) == $expected) {
            array_splice($range, 1, 1, $date);
        } else {
            unset($range);
            $range = [$date];
            $ranges[] = &$range;
        }
        $expected = strtotime($date . ' + 1 day');
    }
    foreach ($ranges as $entry) {
        $result[] = implode(" - ", $entry);
    }
    return $result;
}

// Demo run
$str = "2022-07-15, 2022-07-16, 2022-07-17, 2022-07-18, 2022-07-22, 2022-07-25, 2022-07-26, 2022-07-27, 2022-07-28";
$result = groupDates($str);
print_r($result);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan