Rumah > Soal Jawab > teks badan
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粉0578693482024-02-05 00:58:06
Ya, anda boleh:
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 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);