Tentukan selang maksimum perbezaan masa: Pelaksanaan PHP dalam minit, jam, hari, minggu, dsb.
P粉287726308
P粉287726308 2023-09-13 22:30:14
0
1
585

Setelah mengira perbezaan masa, bagaimana saya menentukan sama ada perbezaan itu hanya minit, jam, atau hari, minggu, bulan, tahun...?

$now = new DateTime('now');
$expire_date = date('Y-m-d H:i:s', strtotime('+ 3 weeks'));
$expire_on = new DateTime($expire_date);
$time_left = $now->diff($expires_on);

*** 伪代码如下所示,展示了我想要实现的功能
if ($time_left < 1 小时)
   显示分钟
elseif ($time_left < 1 天)
   显示小时和分钟
elseif ($time_left < 1 周)
   显示天、小时和分钟
elseif ($time_left < 1 月)
   显示周、天、小时和分钟
elseif ($time_left < 1 年)
   显示月、周、天、小时和分钟
endif
** 结束伪代码

Seperti yang saya cepat belajar, saya perlu menjelaskan perkara. Saya hanya mahu memaparkan maklumat yang minimum. Contohnya: "39 minit lagi" dan bukannya "0 hari, 0 jam, 39 minit lagi".

P粉287726308
P粉287726308

membalas semua(1)
P粉561438407

https://www.php.net/manual/en/class.dateinterval.php - Terdapat beberapa sifat dalam objek DateInterval ($time_left adalah salah satu daripadanya) supaya anda boleh mengujinya dan melihat sama ada ia lebih besar daripada 0. Saya cadangkan bermula dengan yang terbesar.

Contohnya:

$now = new DateTime('now');
$expire_date = date('Y-m-d H:i:s', strtotime('+3 weeks'));
$expire_on = new DateTime($expire_date);
$time_left = $now->diff($expire_on);

echo format_interval($time_left);

function format_interval($time_left) {
    $format_string = "";
    $weeks = (int) ($time_left->d / 7);
    $days = (int) ($time_left->d - ($weeks * 7));
    if ($time_left->y > 0) $format_string = "%y year(s), %m month(s), $weeks week(s), $days day(s), %h hour(s) and %i minute(s)";
    elseif ($time_left->m > 0) $format_string = "%m month(s), $weeks week(s), $days day(s), %h hour(s) and %i minute(s)";
    elseif ($weeks > 0) $format_string = "$weeks week(s), $days day(s), %h hour(s) and %i minute(s)";
    elseif ($time_left->d > 0) $format_string = "$days day(s), %h hour(s) and %i minute(s)";
    elseif ($time_left->h > 0) $format_string = "%h hour(s) and %i minute(s)";
    elseif ($time_left->i > 0) $format_string = "%i minute(s)";
    else $format_string = "%s second(s)";
    return $time_left->format($format_string);
}

Demo dalam talian: https://3v4l.org/BiYHD. Cuba tweaking $expire_date dan uji keputusan yang anda dapat.

Nota: Atas sebab tertentu, kelas DateInterval tidak menyokong memberitahu anda nombor minggu. Di atas saya menganggap membahagikan bilangan hari dengan 7 sudah cukup untuk mengira bilangan minggu. Baki hari mesti dikira semula (tolak bilangan hari dalam minggu pengedaran).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan