Autor | Zpráva | ||
---|---|---|---|
Fastman Profil |
#1 · Zasláno: 3. 10. 2015, 11:28:37
Zdravím,
Řeším jeden menší problém s datumem. Jedná se o VIP, kdy daný člověk odešle SMS například 31.1.2016 a tím se mu do databáze přičte 30 dní, což by znamenalo, že VIP by mu vypršelo 30.2.2016 což nikdy nenastane. Je vůči tomuto nějaké řešení, jak tohle fixnout? Děkuji všem za odpovědi. |
||
Alphard_ Profil * |
#2 · Zasláno: 3. 10. 2015, 11:34:01
|
||
Joker Profil |
#3 · Zasláno: 3. 10. 2015, 11:38:43
Fastman:
Pokud se tohle děje, používáte buď špatný datový typ, nebo špatnou funkci pro to přičítání. |
||
juriad Profil |
Fastman:
Vytvoříš si tabulku platby (id INT, uzivatel_id INT, od DATE, do DATE, delka INT) . Do ní vždy jen budeš přidávat záznamy, nic nikdy nemažeš ani neupravuješ.
Jestli má uživatel zaplaceno, zjistíš dotazem: SELECT * FROM platby WHERE uzivatel_id = 123 AND do >= '2015-10-03' Datumy do databáze vkládáš: INSERT INTO platby (uzivatel_id, od, do, delka) VALUES (123, '2015-10-03', '2015-11-02', 30); Kromě DateTime lze použít také strtotime v kombinaci s date. Formát datumu pro MySQL je "Y-m-d" .
|
||
Fastman Profil |
#5 · Zasláno: 3. 10. 2015, 15:05:50
Alphard:
Díky moc. Zkusil jsem <?php $date = date_create('2016-01-31'); date_add($date, date_interval_create_from_date_string('30 days')); echo date_format($date, 'Y-d-m'); ?> |
||
juriad Profil |
#6 · Zasláno: 3. 10. 2015, 15:08:27
Protože date_add vrazí nový datum (ten po přičtení). $date zůstává ten původní.
|
||
Fastman Profil |
#7 · Zasláno: 3. 10. 2015, 15:29:39
Akorát stále nevím, jak udělám, aby se vzalo aktuální datum, to se převedlo na Y-d-m a poté přičetlo 30 dní a vypsalo jej pomocí echo. Zkusil jsem
<?php $date = date("Y-m-d"); date_add($date, date_interval_create_from_date_string('30 days')); echo date_format($date, 'Y-m-d'); ?> |
||
juriad Profil |
<?php # bez parametru = aktuální datum a čas $today = date_create(); $today_as_string = date_format($today, 'Y-m-d'); echo $today_as_string; # připočtením inervalu k $today vznikne $next_month $next_month = date_add($today, date_interval_create_from_date_string('30 days')); $next_month_as_string = date_format($next_month, 'Y-m-d'); echo $next_month_as_string; ?> Nevzalo to z důvodu, že funkce date vrací řetězec a nikoli instanci DateTime. ↓ Nahrazena můra z měsíc. :-) |
||
Fastman Profil |
juriad:
Díky moc, funguje! Akorát jsem tam doplnil chybějící "n" u next_month. $next_month = date_add... |
||
Časová prodleva: 9 let
|
0