DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   2 pitanja u vezi MySQL-a i PHP-a u vezi datuma (http://www.devprotalk.com/showthread.php?t=5595)

misko_ 14. 06. 2008. 21:46

2 pitanja u vezi MySQL-a i PHP-a u vezi datuma
 
Cao,

Imam tablicu u MySQL-u kojo je jedan od podataka tipa date.
Kako da ja sada selektiram redak kojemu je taj datum najstariji.
Znaci ako imam 2 redka i jednome je datum 2008-12-25, a drugome je 2008-12-26, da se meni vrati redak od 2008-12-26.

Kako da mi se u PHP-u vrate svi datumi ižmeđu 2 datuma.
Npr. imam datum 2008-12-25 i 2008-12-27 ja bih želio da mi se vrati aray od
2008-12-26
2008-12-27
2008-12-28
Da li postoji neka gotova funkcija za to ?

HVALA

bluesman 14. 06. 2008. 22:39

Sa datumima mozes da radis kao sa stringovima

1. ... ORDER BY datum ASC
2. ... WHERE datum >= '2008-12-15' AND datum <= '2008-12-17' ORDER BY datim
ili koristi BETWEEN

ivanhoe 15. 06. 2008. 17:13

A mozes i max() i min() funkcije da koristis na datumima, to radi veoma brzo na indexiranim poljima (prakticno trenutno jer se ne radi upit, nego mysql to interno cuva za svaku tabelu) :

SELECT * FROM tabela WHERE datum=(SELECT MAX(datum) FROM tabela);

Ova forma je zgodna ako ne znas unapred koliko tih "najnovijih" rekorda imas, jer onda ne mozes da stavis LIMIT

jablan 15. 06. 2008. 18:26

Što se tiče dobijanja niza svih datuma između dva zadata, ne znam za PHP (naći će se neko već), ali u Rubiju ide ovako (sorry za showoff):
Kôd:

(d1..d2).to_a
:)

bluesman 15. 06. 2008. 18:35

vrlo citko i jasno

misko_ 15. 06. 2008. 22:24

Citat:

Originalno napisao ivanhoe (Napišite 56328)
A mozes i max() i min() funkcije da koristis na datumima, to radi veoma brzo na indexiranim poljima (prakticno trenutno jer se ne radi upit, nego mysql to interno cuva za svaku tabelu) :

SELECT * FROM tabela WHERE datum=(SELECT MAX(datum) FROM tabela);

Ova forma je zgodna ako ne znas unapred koliko tih "najnovijih" rekorda imas, jer onda ne mozes da stavis LIMIT

Pronasao sam da sljedeci puti obavlja posao
PHP kôd:

                $sql_query "SELECT ID, TL_BROJ, UTVRDENA, PRIMJENJENA, ROW_ADD 
                              FROM hnb_tecajna_lista 
                              ORDER BY UTVRDENA DESC 
                              LIMIT 1"


Zamjenim sa tvojim radi brzine...

misko_ 15. 06. 2008. 22:27

Zar je istina da PHP ima tako lošu podršku za datume ???
 
Citat:

Originalno napisao jablan (Napišite 56330)
Što se tiče dobijanja niza svih datuma između dva zadata, ne znam za PHP (naći će se neko već), ali u Rubiju ide ovako (sorry za showoff):
Kôd:

(d1..d2).to_a
:)

Evo ja sam traio po http://www.php.net/manual/en/refs.calendar.php
i koliko se meni čini takva funkcija uopće ne postoji u PHP-u, ili je ja nisam uspio pronaći.

Treba mi i da uporedim koji je od dva datuma veći, nešto tipa
if ($sadašnji_datum => datum_prijene)
i izgleda da PHP nema ništa ni za to, ma svašta...

zira 15. 06. 2008. 22:56

Za dobijanje niza svih datuma mozes koristiti ovako nesto:

http://boonedocks.net/mike/archives/...-with-PHP.html

Inace, postoji range() funkcija u PHP, ali ne i za datume.

Sto se tice poredjenja datuma, ukoliko su u unix timestamp formatu ili MySQL formatu, radice bas to kako sti stavio, nista ti vise ne treba.

Ilija Studen 15. 06. 2008. 23:08

PHP podrška za rad sa datumom i vremenom je blagi užas. Tačnije - gotovo da je i nema. Za sve živo moraš sam da se dovijaš. Nije da je to neki ogorman problem kada naučiš par trikova, ali ne bi bilo loše da sam jezik dolazi sa ekstenzijom koja je tome posvećena.

cvele 16. 06. 2008. 13:57

Licno volim da belezim cist php time stamp, pa onda pomocu to_date fje da radim sta i kako mi treba. Sto se tice performansi nije bas najsrecnije, ali je veoma prakticno

misko_ 16. 06. 2008. 22:00

Evo koda sa kojim sam ovo za datme rijesio mozda netkome zatreba.
PHP kôd:

<?php

    
class MySQL_date 
    
{
        
// site::http://boonedocks.net/mike/archives/137-Creating-a-Date-Range-Array-with-PHP.html
        
public static function createDateRangeArray($strDateFrom$strDateTo
        {
            
// takes two dates formatted as YYYY-MM-DD and creates an
            // inclusive array of the dates between the from and to dates.

            // could test validity of dates here but I'm already doing
            // that in the main script

            
$aryRange=array();

            
$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),     substr($strDateFrom,8,2),substr($strDateFrom,0,4));
            
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),     substr($strDateTo,8,2),substr($strDateTo,0,4));

            if (
$iDateTo>=$iDateFrom) {
                
array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry

                
while ($iDateFrom<$iDateTo) {
                
$iDateFrom+=86400// add 24 hours
                
array_push($aryRange,date('Y-m-d',$iDateFrom));
                }
            }
            
            return 
$aryRange;
        }
     
        
// convert string in format dd.mm.YYYY to MySQL format http://dev.mysql.com/doc/refman/5.0/en/datetime.html YYYY-MM-DD
        // example 18.04.2008 to 2008-04-18
        
public static function ddmmYYYYtoYYYYMMDD($date)
        {
            
$parts explode("."$date);
            
            
$new_date $parts[2] . '-' $parts[1] . '-' $parts[0];
            
            return 
$new_date;
        } 
        
    }
      
?>


cvele 16. 06. 2008. 22:03

samo jedno offtopic pitanje, sto insistirati na klasama ako su sastavljene samo od static funkcija ? jedino organizacije radi... ali to mi nekako nije dovoljno dobar razlog

bluesman 16. 06. 2008. 23:08

pogledaj funkcije strototime(), malo je čitljivije sa tim

PHP kôd:

function createDateRangeArray($strDateFrom$strDateTo
{
    
$aryRange = array(); 
    while (
$strDateFrom <= $strDateTo)
    {
        
$aryRange[] = $strDateFrom;
        
$strDateFrom date("Y-m-d"strtotime ("+1 day"strtotime($strDateFrom)));
    }
    return 
$aryRange;


A mislim da ti je lakse i sa explode("-", $date) nego onoliki substr()...

misko_ 17. 06. 2008. 07:20

Citat:

Originalno napisao cvele (Napišite 56400)
samo jedno offtopic pitanje, sto insistirati na klasama ako su sastavljene samo od static funkcija ? jedino organizacije radi... ali to mi nekako nije dovoljno dobar razlog

"samo" radi organizacije, ali to sa sobom povlaći još par stvari:

1. Ako mi je napravljeno kao klasa, mogu napisati unit test
2. Ako imam unit test, onda mogu lako optimizirati kod bez pretjeranoga straha da cu nesto zeznuti, npr. mogu lako zamjeniti kod fukcije sa ovim što je bluesman napisao i vidjeti da li je sve ok bez da sada moram gledati kao jedna i kako druga funkcija rade...
3. Ako bih imao faj sa funkcijama, postoji mogućnost da ukljućim neki drugi faj koji ima fukcije koje se isto zovu, pa eto opet problema...

Mislim da su ovo uglavnom svi razlozi(bar kojih se trenutno mogu sketiti)...

Da li je to najbolja praksa, pa iskreno nezam, ali mi se zada čini bolja od alternative...

cvele 17. 06. 2008. 08:54

da me ne shvatis pogresno, nisam rekao da je to nesto specijalno lose niti specijalno dobro... samo me je zanimalo.

Kad smo kod toga koliko vas jos koristi unit testing ?

misko_ 17. 06. 2008. 09:45

Citat:

Originalno napisao cvele (Napišite 56436)
da me ne shvatis pogresno, nisam rekao da je to nesto specijalno lose niti specijalno dobro... samo me je zanimalo.

Kad smo kod toga koliko vas jos koristi unit testing ?

...nema problema...

...unit testing -> ja gledam da koristim, kada imam funkciju za koju kužim kako da napišem test, ali ne mogu reći da sam unit test developer, možda jednog dana...

ivanhoe 17. 06. 2008. 18:04

ja preferiram da mi samo baza pravi timestampove, a vadim ih pomocu UNIX_TIMESTAMP(). Tako sam siguran da su svi timestampovi kreirani po istom satu i u istoj vremenskoj zoni, za slucaj da se php vrti na drugoj masini od baze (ili na vise masina za neki load balancing)


Vreme je GMT +2. Trenutno vreme je 04:21.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.