PHP zaman ekleme

7 Cevap php

Ben bir mysql db bir datetime çekerek yaşıyorum ve ben şimdiki zaman karşılaştırmak daha sonra X saat eklemek istiyorum. Şimdiye kadar i var

$dateNow = strtotime(date('Y-m-d H:i:s'));
$dbTime = strtotime($row[0]);

sonra ben $ dbtime + strtotime ("4 saat") çalıştı; ancak 4 saat yerine çiğ 4hours arasında şimdiki zaman için 4hrs eklemek gibi görünüyor. Nasıl X saat dbtime eklerim?

NOT: Ben bu kadar date_add php 5.1.2 kullanıyorum çalışması (5.3.0) değil

7 Cevap

time () ve strtotime () Eğer aşağıdaki gibi bir şey yapmak, böylece, saniyede unix zaman damgaları neden sizin db sağlanan ve karşılaştırma yapın:

$fourHours = 60 * 60 * 4;
$futureTime = time() + $fourHours;

sonra ben $ dbtime + strtotime ("4 saat") çalıştı; ancak 4 saat yerine çiğ 4hours arasında şimdiki zaman için 4hrs eklemek gibi görünüyor. Nasıl X saat dbtime eklerim?

strtotime isteğe bağlı ikinci bir argümanı var. Orada bir Unix zaman damgası sağlayın ve çıkış yerine geçerli tarihten bu tarihe göre olacaktır.

$newTime = strtotime('+4 hours', $dbTime);

Ayrıca Unix damgaları saniye bazlı olduğu gerçeği kullanabilirsiniz - saniyeler içinde ne dört saat biliyorsanız, sadece zaman tamsayı değeri olduğunu ekleyebiliriz.

Burada epeyce seçenek var:

1..

$result = mysql_query("SELECT myDate FROM table");
$myDate = mysql_result($result, 0);
$fourHoursAhead = strtotime("+4 hours", strtotime($myDate));

2.

// same first two lines from above
$fourHoursAhead = strtotime($myDate) + 4 * 60 * 60;

3.

$result = mysql_query("SELECT UNIX_TIMESTAMP(myDate) FROM table");
$myDate = mysql_result($result, 0);
$fourHoursAhead = $myDate + 4 * 60 * 60;

4.

$fourHoursAhead = strtotime("+4 hours", $myDate);

5.

$result = mysql_query("SELECT UNIX_TIMESTAMP(DATE_ADD(myDate, INTERVAL 4 HOUR))");
$fourHoursAhead = mysql_result($result, 0);

strtotime ("4 saat", $ dbtime);

İkinci argüman göreli tarihlerinin hesaplanması için bir üs olarak kullanılan zaman damgası; şimdiki zaman benimsenmiş. documentation göz atın.

Edit: For short periods of time, max 1 week, adding seconds to a timestamp is perfectly acceptable. There is always (7 * 24 * 3600) seconds in a week; the same cannot be said for a month or year. Furthermore, a unix timestamp is just the number of seconds that have elapsed since the Unix Epoch (January 1 1970 00:00:00 GMT). That is not effected by timezones or daylight-savings. Timezones and daylight-savings are only important when converting a unix timestamp to an actual calendar day and time.

İşte ben bunu istiyorum nasıl:

  1. UNIX_TIMESTAMP() işlevini kullanarak veritabanından zaman çekin.

  2. UNIX zaman damgası yani 4*60*60 buna eklemek saniye içinde.

  3. PHP'nin localtime() veya strftime() işlevini kullanarak bir tarihe değiştirilmiş UNIX zaman damgası dönüştürmek.

    query("SELECT UNIX_TIMESTAMP(someDatetimeColumn) ...");
    . . .
    $dbTimeAdjusted = localtime($row[0] + 4*60*60);
    

Muhtemelen karşılaştırmak yapmak için en güvenli yolu doğru SQL olduğunu

SELECT * FROM my_table WHERE someDateTimeColumn < DATE_ADD(NOW(), INTERVAL 4 hour)

PHP bunu montaj konum beri, dinamik kod karşılaştırmak için gereken ne olursa olsun "4 saatlik" biraz değiştirebilirsiniz.

(Not: sütun karşılaştırma, diğer tarafta tüm hesaplama koyarak MySQL ziyade kez satıra birden kez sorgusu başına hesaplama yapmak ve aynı zamanda tablonun indeksini kullanmak için izin verir, o sütun biri varsa.)

DB tarafından döndürülen damgası SQL biçiminde olduğunu varsayarsak, şu ince çalışması gerekir:

$dbTime = strtotime($row[0]);
$nowTime = time();

$future_dbTime = strtotime("+4 hours", $dbTime);

$diff_time_seconds = $nowTime - $dbTime;

if ($diff_time_seconds > 0) {
       echo "The current time is greater than the database time by:\n";
       $not_equal = true;

    }
if ($diff_time_seconds == 0) {
       echo "The current time is equal to the database time!";
    }
if ($diff_time_seconds < 0) {
       echo "The current time is less than the database time by:\n";
       $not_equal = true;
    }

if ($not_equal) {
$diff_time_abs_seconds = abs($diff_time_seconds);
echo date('h:m:s', $diff_time_abs_seconds);
}