PHP iki datetime arasındaki aralık saniye olsun?

4 Cevap php

2009-10-05 18:11:08

2009-10-05 18:07:13

Bu bunu nasıl 235, üretmek gerekir?

4 Cevap

Sen strtotime() bunu yapmak için kullanabilirsiniz:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')

PHP Tarih Saat referans bu gibi şeyler için yararlıdır: PHP Date Time Functions

strtotime(), muhtemelen en iyi yoldur.

$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')

DateTime nesneler ile, bu gibi yapabilirsiniz:

$date = new DateTime( '2009-10-05 18:07:13' );
$date2 = new DateTime( '2009-10-05 18:11:08' );

$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();

Çünkü unix dönem sınırlamaları nedeniyle, 1970 öncesi ve 2038 sonrası tarihleri ​​compairing sorunları olabilir. I (getTimestamp) (= tek, ikinci bakma) ama yalak Unix çağ dönüşümleri geçmek önlemek hassasiyet gevşek seçin. Bu yapmanız için ne yapıyorsun bağlıdır ...

Benim durumumda, ortalama aylık boyu olarak "30" yerine 365 ile (12 * 30), ve bir kullanılabilir çıkış hatası azalır.

function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds
    $diff = $end->diff($start);
    $diff_sec = $diff->format('%r').( // prepend the sign - if negative, change it to R if you want the +, too
                ($diff->s)+ // seconds (no errors)
                (60*($diff->i))+ // minutes (no errors)
                (60*60*($diff->h))+ // hours (no errors)
                (24*60*60*($diff->d))+ // days (no errors)
                (30*24*60*60*($diff->m))+ // months (???)
                (365*24*60*60*($diff->y)) // years (???)
                );
    return $diff_sec;
}

Note that the error could be 0, if "mean" quantities are intended for diff. The PHP docs don't speaks about this... In a bad case, error could be:

  • Fark zaman aralıkları uygulanan 0 saniye ise < 1 ay
  • Fark> 1 ay zaman aralıkları uygulanan 0-3 gün eğer
  • Fark> 1 yıl zaman aralıkları uygulanan 0-14 gün eğer

Birileri "fark" çukur olmayan-30-gün ay yürürken fark ile "d" şarj, 30 gün olarak "m" ve 365 gibi "y" düşünmeye karar olduğunu varsayalım tercih ...

Biri bu konuda daha fazla şey biliyor ve resmi belgeleri sağlayabilir, hoş geldiniz!