PHP không có quá tải toán tử * vì vậy làm cho PHP cố gắng chuyển đổi chúng thành chuỗi trước, nhưng DateInterval
không hỗ trợ điều đó:
interval 1: 03:05
interval 2: 05:00
Total interval : 08:05
Thay vào đó bạn cần phải tạo ra một đối tượng mới DateTime
, sau đó sử dụng add
chức năng để thêm các khoảng và cuối cùng hiển thị sự khác biệt với các điểm tham chiếu:
$e = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval : ", $f->diff($e)->format("%H:%I"), "\n";
Full Exmaple/(Demo):
$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 = new DateTime('00:00');
$f = clone $e;
$e->add($interval1);
$e->add($interval2);
echo "Total interval : ", $f->diff($e)->format("%H:%I"), "\n";
Bạn cũng có thể muốn xem xét tìm cách DateInterval
cửa hàng giá trị của nó và sau đó mở rộng f rom nó để làm việc tính toán của riêng bạn. Ví dụ sau (Demo) là thô, nó không đưa vào tài khoản the inverted thingy, nó not (re)set $days
to false
và tôi đã không kiểm tra/kiểm tra các đặc điểm kỹ thuật ISO của the period specifier on creation nhưng tôi nghĩ rằng nó là đủ để cho thấy ý tưởng:
class MyDateInterval extends DateInterval
{
/**
* @return MyDateInterval
*/
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";
* Nếu bạn viết một phần mở rộng PHP, nó thực sự là có thể (ít nhất là loại).
Một số thí nghiệm hơn: http://codepad.viper-7.com/Lh2DtL ([ý chính] (https: // ý chính .github.com/3142405)) – hakre
Xin chào, nếu như, với giải pháp của bạn, tổng số lớn hơn 60 giây, 60 phút, 24 giờ, ... vv? :) – Talus
@Talus: Xem ý chính, không phải là nó hoàn hảo, nhưng nó cho thấy cách bạn có thể xử lý điều đó. – hakre