Bagaimanakah saya boleh menambah dua objek DateInterval dalam PHP?

Mary-Kate Olsen
Lepaskan: 2024-11-04 05:07:02
asal
811 orang telah melayarinya

How can I add two DateInterval objects in PHP?

Bagaimanakah Kita Boleh Menambah Dua Selang Tarikh dalam PHP?

Apabila bekerja dengan tarikh dan masa dalam PHP, kita selalunya perlu melakukan pengiraan yang melibatkan selang tarikh. PHP menyediakan kelas DateInterval untuk mewakili tempoh masa. Walau bagaimanapun, menambah dua objek DateInterval adalah tidak mudah.

Isu timbul kerana PHP tidak menyokong lebihan muatan operator untuk objek. Akibatnya, menggunakan operator dengan objek DateInterval cuba menukarnya kepada rentetan, yang tidak disokong. Ini mengakibatkan tingkah laku yang tidak dijangka dan pengiraan yang salah.

Penyelesaian

Untuk menambah dua objek DateInterval, kita boleh menggunakan pendekatan berikut:

  1. Buat objek DateTime baharu dan tetapkannya kepada titik rujukan (cth., tengah malam).
  2. Tambahkan DateInterval pertama pada objek DateTime menggunakan kaedah tambah.
  3. Tambahkan DateInterval kedua pada objek DateTime menggunakan kaedah tambah.
  4. Kira perbezaan antara titik rujukan asal dan objek DateTime yang dikemas kini untuk mendapatkan jumlah tempoh.

Berikut ialah contoh penuh:

<code class="php">$a = new DateTime('14:25');
$b = new DateTime('17:30');
$interval1 = $a->diff($b);
echo "interval 1: " . $interval1->format("%H:%I");
echo "<br />";

$c = new DateTime('08:00');
$d = new DateTime('13:00');
$interval2 = $c->diff($d);
echo "interval 2: " . $interval2->format("%H:%I");
echo "<br />";

$e = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval: " . $f->diff($e)->format("%H:%I") . "\n";</code>
Salin selepas log masuk

Penyelesaian ini mencipta objek DateTime $e baharu dan menetapkannya kepada tengah malam (00:00). Kemudian, ia menambah objek DateInterval pertama dan kedua ($interval1 dan $interval2) kepada $e menggunakan kaedah tambah. Akhir sekali, ia mengira perbezaan antara titik rujukan asal ($f, yang juga tengah malam) dan $e yang dikemas kini untuk mendapatkan jumlah tempoh.

Penyelesaian Terperinci

Untuk senario yang lebih kompleks, kita boleh melanjutkan kelas DateInterval untuk menentukan tingkah laku kita sendiri untuk menambah objek DateInterval. Ini membolehkan kami menyimpan tempoh dalam format yang lebih mudah dan melakukan pengiraan dengan lebih cekap.

Berikut ialah contoh kelas lanjutan:

<code class="php">class MyDateInterval extends DateInterval
{
    public static function fromDateInterval(DateInterval $from)
    {
        return new MyDateInterval($from->format('P%yY%dDT%hH%iM%sS'));
    }

    public function add(DateInterval $interval)
    {
        foreach (str_split('ymdhis') as $prop) {
            $this->$prop += $interval->$prop;
        }
    }
}

$a = new DateTime('14:25');
$b = new DateTime('17:30');
$interval1 = $a->diff($b);
echo "interval 1: " . $interval1->format("%H:%I") . "\n";

$c = new DateTime('08:00');
$d = new DateTime('13:00');
$interval2 = $c->diff($d);
echo "interval 2: " . $interval2->format("%H:%I") . "\n";

$e = MyDateInterval::fromDateInterval($interval1);
$e->add($interval2);
echo "Total interval: " . $e->format("%H:%I") . "\n";</code>
Salin selepas log masuk

Dalam contoh ini, kelas MyDateInterval memanjangkan DateInterval dan mengatasi kaedah tambah untuk mengumpul tempoh bagi setiap komponen (tahun, bulan, hari, jam, minit dan saat). Dengan menggunakan kelas lanjutan ini, kami boleh menambah objek DateInterval dengan lebih cekap dan mudah.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menambah dua objek DateInterval dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!