PHP Dátum műveletek, MySQL-ból lekérdezve
Sziasztok!
Hogyan tudok MySQL adatbázisból lekérdezett dátumhoz hozzáadni X napot?Ezzel még hozzáadja a napokat a mai dátumhoz. Azonban ha lekérdezek egy dátumot az adatbázisból, majd hozzáadok 1 hónapot, máris nem adja hozzá a hónapot a dátumomhoz. Kiírtam echo-val, hogy a lekérdezés jó e, és igen, jó, de már nem adja hozzá. Szóval ezt a lekérdezett dátumos hozzáadást hogy oldhatom meg?
Remélem hamar kapok választ. Üdvözlettel: Dfoglalo
■ Hogyan tudok MySQL adatbázisból lekérdezett dátumhoz hozzáadni X napot?
$datum = date("Y-m-d", strtotime("+1 month"));
echo $datum;
Remélem hamar kapok választ. Üdvözlettel: Dfoglalo
A feladatot többféleképp meg
A téma zárható.
Datetime aritmetika
Dátum idő környékén 4 elemi művelettel dolgozni életveszélyes a szökőévek, óra átállítások és időzónák miatt. SOHA nem jó ötlet egyszerű szorzásokkal operálni, erre vannak a dátum/idő kezelő könyvtárak. Csakhogy egy (legalábbis számomra) klasszikust idézzek: "If you don't hate time zones, you're not a real programmer."
De, hogy az eredeti kérdésre is válaszoljak:
A problémát az okozza, hogy adatbázisból valószínűleg kész stringként (pl: "2013-04-20") kapod vissza a dátumot. Ahoz, hogy ebből számolni tudjon az strtotime() előbb újra EPOC time-á kell alakítanod (másodpercek száma 1970 január elseje óta), erre ugyanúgy használhatod az strtotime() -ot:
Másik megoldás lehet elve SQL querybe berakni ezt a műveletet mondjuk DATE_ADD -al, vagy sima összeadással, valahogy így:
Megoldva
Az aritmetikával kapcsolatban
Trollok
A többi értelmes hozzászólónak mondom: nem szükséges figyelembe vennem az időzónákat, sem a szökőéveket, és a pontos dátum sem olyan fontos az én helyzetemben. Elég egy napra pontos dátum. Amit meg akartam csinálni, azt pedig megcsináltam, köszi a segítséget.
Hidd el, én is voltam kezdő,
Érzésre: jó lenne megtanulnod (számítástechnikai) angolul, párezres a szókészlet, és utána minden szöveget meg fogsz érteni.
Ha új programozási nyelvet vagy rutinkönyvtárat, keretrendszert szeretnék megismerni, egy ideje az az első, hogy végignyálazom a teljes dokumentációját, és akkor összeáll a fejemben a kép, hogy mit lehet vele megcsinálni.
Kedves Dfoglalo és Gábor!
Gábor, linkelhetted volna az első hozzászólásodban a doksikat (esetleg a fv-t pontosan), ez sokszor hatalmas segítség, mert idegességében, gyakorlatlanságában, stb okból tényleg nem találta. Kicsit tényleg leszóltad, pedig nem szoktad.
Dfoglalo, pár órás reg-gel letrollozod az egyik legsegítőkészebb profit - hát én is meggondolom, hogy a további kérdéseidet elolvassam-e, pedig én is többet válaszolok, mint kérdezek... Ez így nem egészen kerek. Ebben az esetben a kód kiírásával nagyon nem értek egyet én sem, de complex857 sajnos így szeret bizonyítani. Ha időben látom a témát, biztos hogy én linkelek + megmondom, mit keress. De az tényleg igaz: jobb, ha neked kell rátalálni, mi csak rávezetünk.
Mindketten: légyszíves beszéljetek meg egy találkozót, és hívjátok meg egymást egypár sörre, az én egészségemre ( :) ), vagyis béke legyen veletek.
(Gábor, a szökőév mellett sose felejtsd az óraállítást sem, országonként különböző!)
Még egy odafigyelnivaló (mindenkinek): az adatbázisszerver és a PHP órája (időzónája) nem mindig azonos, mivel többnyire fizikálisan is másik szerver, rendszergizda nem figyelt, te csak a PHP-t állítottad, stb. Az ebből eredő tévedések elkerülésére egy nagyon egyszerű módszer (ha rendszered lehetővé teszi): soha nem használsz MySQL
NOW()
és társait, mindig (insert és update esetén) PHP-ból előállított időt írsz a DB-be. Ez nem mindig járható út, és lehet emiatt lassabb is a művelet.Janoszen írt erről egy cikket, amiben minden fontos benne van, de "elhagytam" a könyvjelzőjét. Janoszen, belinkelnéd? Ahol az összes PHP-MySQL időproblémával foglalkozol. (WL cikknek is kéne lenni belőle, és tudástárba vele.)
Én a DateTime osztályt