PHP Tarih Aralığı?

7 Cevap php

Ben şimdi yeni bir UI yazıyorum bir üçüncü taraf satıcı tarafından oluşturulan bir DB var.

DB saklar olay (GMT) unix zaman damgaları gibi kez başlar. Ne yapmam gereken bir gün aralığı için bu sorgu olduğunu. Yani muhtemelen ben sadece bir yapmak gerekiyor:

SELECT * WHERE start > $last_night_at_midnight AND start < $tonight_at_midnight

Ben çalıştırıyorum sorun bu değişkenleri oluşturmak için PHP tarih / zaman işlevleri birleştirmek için basit bir yoludur. Ben yapıyorum her şey böyle basit bir işlem için yol çok karmaşık gibi hissediyor.

Herkes bu basit bir çözüm var mı?

Şerefe

7 Cevap

Bu bunu yaparken gerçekten geriye bir yoldur, ancak çeşitli tarih aralıklarını yapabilmek için gerekiyorsa, bugün veya bir gün değil, sadece, her iki dilde garip bir zaman / tarih özelliklerini birleştirmek ve birlikte gidebiliriz:

$php_start = strtotime("Some valid date expression");
$php_end = strtotime("Some other valid date expression");

$result = my_sql_query("
          Select * FROM someDB 
          WHERE DATE(FROM_UNIXTIME(date_column)) 
          BETWEEN FROM_UNIXTIME($php_start) AND FROM_UNIXTIME($php_end)");

Sorguda () TARİH kullanarak sql verilerinin zaman parçası bakarak, ve sql sunucu tarihlerini nasıl türettiği tutarlı her üç aracı için FROM_UNIXTIME kullanarak rahatsız olmayacaktır sağlar.

Sadece bugün için bir tarih aralığı almak benim favori yoludur:

  $today_start = strtotime("today");
  $today_end = strtotime("+1 day", $today_start);

strtotime aslında daha iyi, ben daha iyi strtotime DST işlemesi nedeniyle, 86.400 ya da böyle bir şey eklemeden, sonra buldum. Geçen hafta öğrendim.

Unix zaman dönüşüm PHP'nin strtotime() düz-İngilizce için check out.

Bu Paolo Bergantino gösteriyor gibi, "bugün gece yarısı" ve "yarın gece yarısı" ve diğer benzer yapıları kullanmanızı sağlar.

strtotime - Hiç awesomenest PHP zaman fonksiyonu.

$last_night_at_midnight = strtotime("today midnight");
$tonight_at_midnight = strtotime("tomorrow midnight");

strtotime Burada yararlı bir tanesidir ...

$t1=strtotime("today");
$t2=strtotime("tomorrow");

$sql="select * from foo where timecol between $t1 and $t2";

Yazma zamanı (09-03-2009 19:06) de, bugün 00:00:00 09-03-2009 eşittir ve yarın 10-03-2009 00:00:00 eşittir

Eğer keyfi gün almak gerekiyorsa, kullanmak gmmktime

PHP time () fonksiyonu burada kullanım olabilir: http://be2.php.net/manual/en/function.time.php

Daha specificaly bu sayfada verilen örnek muhtemelen bilmeniz gerekenler size söyleyecektir. 3. echo deyimi bir göz atın

PHP veya MySQL bu değişkenleri oluşturabilir ya ...

$tonight_at_midnight    = mktime(0,0,0);
$last_night_at_midnight = $tonight_at_mindnight - 86400;

Diğer olasılık SQL şöyledir:


SELECT * FROM tbl1 WHERE start > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
AND start < UNIX_TIMESTAMP(CURDATE())

(Test değil)