PHP Tarih Soru

6 Cevap php

PHP tarihleri ​​kullanarak matematik biraz yapmaya çalışıyorum. Ben bir shoutbox değiştirerek yaşıyorum ve ben şu işlevselliğini uygulamak istiyorum.


Mesajı tarih = bugün, yazılan zamanı dönerseniz

else if tarih = dün, iade "dün"

else date = X gün önce


Nasıl bir zaman damgası (timestamp UNIX sürede biçimlendirilmiş) kaç gün önce hesaplamak için php tarih fonksiyonları kullanmak istiyorsunuz

6 Cevap

Bu deneyin:

$shoutDate = date('Y-m-d', $shoutTime);
if ($shoutDate == date('Y-m-d'))
    return date('H:i', $shoutTime);

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'))))
    return 'yesterday';

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago';

Kere saniye saklanan gerçeği kullanın:

 $days = floor(($shoutTime - time()) / 86400) + 1; // 86400 = 24*60*60

 switch ($days) { 
   case 0:
     return date('H:i', $shoutTime);
   case -1:
     return 'yesterday';
   case 1:
     return 'tomorrow';
 }

 return "$days ago";

Php 5.3.0 veya daha yüksek, kullanmak DateTime::diff (aka date_diff ()). Olabilir

Hemen hemen her php, Unix zaman damgaları için tarih dönüştürmek ve (saniyede 1 gün) 86400 tarafından aralarındaki farkı bölün.

DateTime sınıfı kullanın ve sonra bir yöntem var diff.

Try using date_parse.
From the manual:

<?php
print_r(date_parse("2006-12-12 10:00:00.5"));
?>

Basacaktır

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)

Ben size çok strtotime to get "Yesterday". It makes it more readable (ve daha kolay hatırlarsınız) tarihleri ​​hesaplama daha "elle" kullanımı ve eğilimli muhtemelen daha az hata olduğunu işaret edilmiştir sanmıyorum.

$int = strtotime('Yesterday');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') {
    return date('H:i:s', $shouTime);
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) {
    return "Yesterday.";
} else {
  $days = floor($shoutTime - time() / 86400);
  return "$days ago.";
}