Data vergelijken met in if-statement

Mijn doel is om het te laten zien of het bericht reacties toestaat en of het dan controleert of de date_comments_expires NIET vóór de verstreken dag is. Ik weet niet helemaal zeker hoe ik dit als statement moet afmaken. Alle hulp?

if ($mainNews[0]['allow_comments'] == 'Yes' AND $mainNews[0]['date_comments_expire'] == ) {

BEWERK:

Hier is mijn bijgewerkte code waarin ik een aanroep krijg naar ledenfunctie getTimeStamp van niet-object

if ($mainNews[0]['allow_comments'] == 'Yes' AND $mainNews[0]['date_comments_expire']->getTimestamp() > time() ) {
                    echo "".$mainNews[0]['number_of_comments']."";   
                }    
0
date_comments_expire is een datetime-veld
toegevoegd de auteur Jeff Davidson, de bron
Wat bevat $ mainNews [0] ['date_comments_expire'] ?
toegevoegd de auteur str, de bron
Is date_comments_expire een MySQL DATUM -veld?
toegevoegd de auteur budwiser, de bron
@Book: Ik denk dat dit het "Ik weet niet helemaal zeker hoe ik dit deel als statement" moet afmaken, hij weet niet wat hij na de laatste == moet zetten.
toegevoegd de auteur mu is too short, de bron
mis je iets ] ==) ?
toegevoegd de auteur Book Of Zeus, de bron

1 antwoord

Dit is volledig afhankelijk van wat er is opgenomen in de datum_comments_expire -index van uw array. Ik zou verwachten dat het een Unix-tijdstempel is dat aangeeft wanneer de opmerkingen vervallen, of een redelijke tekstuele interpretatie daarvan.

Als je een unix timestamp gebruikt, dan doe je het geweldig. Als het tekst is, moet je het converteren naar een unix timestamp voordat je doorgaat. De beste functie hiervoor is strtotime() . Het kan verschillende textuele datetime-representaties ontleden en als resultaat een unix timestamp retourneren.

Als u het eindpunt eenmaal als tijdstempel hebt weergegeven, kunt u het vergelijken met de huidige tijd. Hiervoor kunt u de tijd() -functie, die de huidige tijd als een unix tijdstempel retourneert.

Omdat Unix-tijdstempels slechts gehele getallen zijn (met name het aantal seconden sinds 1 januari 1970), is dit een eenvoudige vergelijking.

Op het einde ziet uw code er als volgt uit:

// convert to timestamp if necessary, remove if unneeded
$commentExpiry == strtotime($mainNews[0]['date_comments_expire']);

if ($mainNews[0]['allow_comments'] == 'Yes' AND 
    $commentExpiry > time()) {
  //submit comments
} else {
  //error handling
}

2
toegevoegd
Wat als het veld date_comments_expire een datetime-indeling is?
toegevoegd de auteur Jeff Davidson, de bron
Ik heb mijn code hierboven bijgewerkt.
toegevoegd de auteur Jeff Davidson, de bron
ik heb al gezegd dat het een datetime-veld is
toegevoegd de auteur Jeff Davidson, de bron
@JeffDavidson Bedoel je dat het een PHP DateTime-object is? In dat geval kunt u DateTime :: getTimestamp() gebruiken om de Unix-tijdstempel te verkrijgen en deze vergelijken zoals hierboven. In principe wordt dat deel van de conditionele code $ mainNews [0] ['date_comments_expire'] -> getTimestamp ()> time()
toegevoegd de auteur AgentConundrum, de bron
@JeffDavidson Ok, dus je gebruikt geen PHP DateTime-objecten. Kun je me precies laten zien hoe $ mainNews [0] ['date_comments_expire'] wordt gegenereerd? Is dit een veld dat u uit een database hebt gehaald? Zo ja, welke database en wat is het gegevenstype van het veld?
toegevoegd de auteur AgentConundrum, de bron
@JeffDavidson Klopt, maar er is ook een DateTime-object in PHP, dat is wat mij in de war bracht. Ik neem aan dat je nu over het datatype MySQL DATETIME praat, in welk geval strtotime() er geen probleem mee zou moeten hebben, wat ik oorspronkelijk had aanbevolen. Heeft dit je een fout gegeven? (Ik veronderstelde door "wat als het een datetime-indeling is" dat je de PHP DateTime bedoelde, omdat het antwoord dat ik je al gegeven had zou werken op de MySQL-versie)
toegevoegd de auteur AgentConundrum, de bron