Datetime ile ilgili sorunlar () ve veritabanı fonksiyonları - PHP ile yazılmış TV rehberi

3 Cevap php

Ben programları veritabanında saklanan tüm verileri ile, geliyor (ve bazı listeleri, geçmişten önceki airings) listeleyen bir TV Guide oluşturma. Bu benim sürümü (yakında 5.30 veya 6 yükseltme) 5.28 olması, PHP çalışır.

Aşağıda (not alan Airdate veritabanında DATETIME olarak depolanır) çalışan bir betik:

[Yasal Uyarı: komut benim değil, ama ben indirilen ve kendi ihtiyaçlarına göre değiştirilebilir bir jenerik bir.]


<? //connect to mysql //change user and password to your mySQL name and password
mysql_connect("localhost","root","PASSWORD"); 
//select which database you want to edit
mysql_select_db("tvguide1"); 
//select the table
$result = mysql_query("select * from epdata3 order by airdate LIMIT 20;");
//grab all the content
while($r=mysql_fetch_array($result))
{ 
 //the format is $variable = $r["nameofmysqlcolumn"];
 //modify these to match your mysql table columns
$programme=$r["programme"];
$channel=$r["channel"];
#$airdate = strtotime($r['airdate']);
  $airdate = strtotime($r['airdate']);
  $now = strtotime("NOW");
 $currentYear = date("Y", $now);
$yearOfDateFromDatabase = date("Y", $airdate);
 if($yearOfDateFromDatabase == $currentYear)
$dateFormat = "F jS - g:ia"; // dateFormat = 24 December
else
$dateFormat = "F jS, Y - g:ia"; // dateFormat = 01 January 2010
$currentTime = date("g:ia", $airdate); // format of "Y" gives four digit year ie 
2009 not 09
$airdateFormatted = date($dateFormat, $airdate);
$sDate = date("F dS, Y - g:ia",$airdate);
$episode=$r["episode"];
$setreminder=$r["setreminder"];
echo "<tr><td><b>$programme</b></td><td>showing on $channel</td>";
echo "<td>$airdateFormatted</td><td>$episode</td><td>$setreminder</td></tr>";
}
?>

O kadar gelen tüm bölümlerini gösterir ve orada varsa önümüzdeki yıl geliyor, bu gibi, yıl ile bunları görüntüler:

TV Programme showing next on Channel1 December 30th, 2009 - 6:00pm "Episode 1 - Photosynthesis" Set Reminder
TV Programme showing next on Channel1 January 6th - 2:45pm "Episode 2 - Behind the Music" Set Reminder
TV Programme showing next on Channel1 January 7th - 8:00pm "Ultimate Car Crimes" Set Reminder

Ancak, ne yapmam bunu istiyorum beni elle veritabanından silmeden ziyade (program uzunlukları değişir yana, ama bir yerde komut ayarlanmış olması gerekir) süresi doldu bir süre sonra belirli kayıtları kaldırmak olduğunu. Bazı programlar, diğerleri 60 dakika, 30 dakika uzun ... uzunlukları temelde, değişir.

Ne Ben bunu yapmak istiyorum (. O anki tarihi olarak ilk ilan tarihini görünmüyor fark) şudur:

TV Programme showing next on Channel1 6:00pm "CCTV Cities - Wigan" Set Reminder
TV Programme showing next on Channel1 January 9th - 2:45pm "Roman Empire - A History of its People" Set Reminder
TV Programme showing next on Channel1 January 10th - 8:00pm "Celebrity 100 Worst Moments" Set Reminder

but I don't know how to configure it to do this with PHP or the date() function. It works fine with the dates, and showing them. I don't have access to cron jobs since this is on a localhost Apache installation on Windows Vista Home Edition.

Herkes bana bu anlamaya yardımcı olabilir eğer çok duyacağız - Tüm yardım çok takdir edilmektedir.

Ben şu anda "gelişme cehennemde" beri, canlı bir site olarak bu koymak değil, ve ben doğru mümkün olduğunca şeyler almak istiyorum.

3 Cevap

Sorunuzu biraz belirsiz, ama ben bölüm bugün havalandırma olduğunda, sadece tarih gösterecek, böylece sen bugün ya da gelecekte sadece bölümleri seçebilirsiniz nasıl soran ve nasıl tarihi biçimlendirmek için varsayalım.

İşte bu iki işleyebilir kod gözden geçirilmiş bir versiyonu bulunuyor:

<?php
//connect to mysql
mysql_connect("localhost","root","PASSWORD");
mysql_select_db("tvguide1"); 

// Select only results for today and future
$result = mysql_query("SELECT * FROM epdata3 WHERE airdate >= CURDATE() ORDER BY airdate ASC LIMIT 20;");

while($r = mysql_fetch_array($result)) { 

    $programme   = $r["programme"];
    $channel     = $r["channel"];
    $airdate     = strtotime($r['airdate']);
    $episode     = $r["episode"];
    $setreminder = $r["setreminder"];
    $now         = time();

    if(date('Y-m-d') == date('Y-m-d', $airdate)) {
        // Same date, show only time
        $dateFormat = 'g:ia';
    } elseif(date('Y') == date('Y', $airdate)) {
        // Same year, show date without year
        $dateFormat = 'F jS - g:ia';
    } else {
        // Other cases, show full date
        $dateFormat = 'F jS, Y - g:ia';
    }

    $airdateFormatted = date($dateFormat, $airdate);

    echo "<tr><td><b>$programme</b></td><td>showing on $channel</td>";
    echo "<td>$airdateFormatted</td><td>$episode</td><td>$setreminder</td></tr>";
}
?>

MySQL anlamıyla kayıtları milyonlarca işleyebilir - Arşive zaman neden silme rahatsız ..? Sadece arşivlenmiş kayıtları görünmüyor.

bunun yerine gelecekteki kayıtları listeleyen için:

$result = mysql_query("select * from epdata3 order by airdate LIMIT 20;");

Ben böyle bir şey öneririm:

$result = mysql_query("select * from epdata3 WHERE airdate > '$today' ORDER BY airdate LIMIT 20;");

Bir konser listesi sayfası için ben yıllar önce de db 'tam' alabilir korkan bir silme algorythm ekledi - ancak daha sonra pişman ...