Chcę logiki, jeśli $ due jest równa nie ma daty, a następnie chcę danych począwszy od 2000. Mój kod poniżej nie działa.
if($due == '0000-00-00 00:00:00'){
$due = strtotime('2000-00-00 00:00:00');
}
Chcę logiki, jeśli $ due jest równa nie ma daty, a następnie chcę danych począwszy od 2000. Mój kod poniżej nie działa.
if($due == '0000-00-00 00:00:00'){
$due = strtotime('2000-00-00 00:00:00');
}
Jeśli przechowywania strtotime() w $ należnej, to trzeba porównać ją tak, zbyt
if($due == strtotime('0000-00-00 00:00:00')){
$due = strtotime('2000-00-00 00:00:00');
}
lub prościej
if($due == 0){
$due = strtotime('2000-00-00 00:00:00');
}
ale jeśli $ powodu pochodzi z bazy danych jako ciąg znaków, należy strtotime():
$due = strtotime($due);
if($due == 0){
$due = strtotime('2000-00-00 00:00:00');
}
Należy jednak pamiętać o strefach czasowych. Oznacza to, strtotime ('0000-00-00 00:00:00 UTC')! = Strtotime ('0000-00-00 00:00:00 EST'). Może to również spowodować uszkodzenie twojego porównania.
strtotime ('0000-00-00 00:00:00') może zwrócić wartość ujemną, null, false zależy od wersji PHP – XuDing
Należy upewnić się, że porównuje się wartości w tym samym formacie. Z tego, co masz aktualnie, na trzy rzeczy będzie się działo:
$due
jest int
, ciąg porównywania go z 0000-00-00 00:00:00
zostanie przekonwertowany do int
, co spowoduje 0
i $due
będzie w porównaniu z 0
. Doprowadzi to tylko do dopasowania, jeśli $due === 0
.$due
jest bool
, ciąg zostanie przekonwertowany na bool
, co spowoduje TRUE
, a dostaniesz tylko dopasowanie, jeśli $due === TRUE
.$due
jest jakikolwiek inny typ, zostanie przekonwertowany na ciąg znaków, a dwa zostaną porównane jako ciągi. Dostaniesz tylko mecz, jeśli $due === '0000-00-00 00:00:00'
.Jeśli można powiedzieć, że prawdopodobnie trzeba porównać wartości jako liczby całkowite. Oznacza to, że musisz przekazać dowolny ciąg znaków przez strtotime()
- w tym $due
, jeśli jest to ciąg znaków. Ponieważ nie pokazujesz przykładowej wartości $due
, nie mogę podać dokładnego działającego kodu.
strtotime(YourDate) != NULL
działa też dobrze.
Pracowałem nad sekcją bazy danych DOB i DOM (data małżeństwa). Wydaje się, że wartość NULL zapisała datę jako 0000-00-00. Co jest głupotą, szczerze mówiąc.
A może moją głupotą było uczynienie pola polem DATE zamiast uczynienia z niego VARCHAR i przytrzymania tam wartości STRTOTIME.
<?php
if(strtotime($dates->dom) != NULL)
{
echo '<a href="' . base_url() . 'dates/dom/' . $dates->dom . '">' . date('j F, Y',strtotime($dates->dom)) . '</a>';
}
else
{
print 'Not Listed Yet';
} ?></strong>
chciałbym zaproponować najprostszą formą
if(!$due)
$due = strtotime('2000-00-00 00:00:00');
Oto rozwiązanie aby sprawdzić, czy pole datetime w bazie danych (mysql) jest zerowy lub '0000-00-00 00:00:00'
wybierając wszystkie z startTime jest null lub "0000-00-00 00:00:00" i czas zakończenia nie jest (zerowy lub "0000-00-00 00:00:00")
Na końcu bazy danych
select * from table where IFNULL(MONTH(starttime),0) >= 1 and IFNULL(MONTH(endtime),0) < 1;
na php końcowego
if((int)$starttime && !(int)$endtime){ /// }
wiem, że jest to stara sprawa, ale ta odpowiedź może pomóc ktoś
strtotime zwraca znacznik czasu w przypadku powodzenia, FALSE w przeciwnym przypadku.
$test = strtotime($due);
$due = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due;
unset($test);
pozdrowienia.
Nie wiem, dlaczego strtotime nie działało poprawnie dla mnie. Prawdopodobnie dzieje się tak z powodu strefy czasowej i innych rzeczy.
Jak zawsze fantazyjne wyrazy regularne działa jak urok. Jestem w jakiś sposób uzależniony!
if(preg_match("/0{4}/" , $dbDateField))
{
// no its not acceptable
}
else
{
//ok
}
Proszę podać wynik polecenia 'var_dump ($ due);' – Wrikken
Skąd pochodzi ta data? – webbiedave
Po pobraniu tej wartości z bazy danych lepiej jest wykonać tę logikę w zapytaniu. chyba że masz dodatkowe akcje do wykonania 'if()' –