Autor Zpráva
pito
Profil
Zdravím,
Nevím si rady jak mám provést datum do českých názvu měsíců.

Zkoušel jsem to udělat takto,ale je to nefunkční.Pořád tam je anglický název měsíce.
<?PHP setlocale( LC_ALL, "Czech"); $timeStamp = mktime(0, 0, 0, 1, 1, $show_year); echo date( "M.Y" , $timeStamp );  ?>


Jinak tady je odkud beru to datum:

<?PHP
    echo "Rok ".date("Y",mktime(0, 0, 0, $show_month, 1, $show_year)); 
    
    $back_month=date("n",mktime(0, 0, 0, $show_month, 1, $show_year-1));
    $back_yaer=date("Y",mktime(0, 0, 0, $show_month, 1, $show_year-1));
    $next_month=date("n",mktime(0, 0, 0, $show_month, 1, $show_year+1));
    $next_yaer=date("Y",mktime(0, 0, 0, $show_month, 1, $show_year+1));
    
    echo "<span>&nbsp;<a href=\"graf.php?m=$back_month&y=$back_yaer\"><</a>&nbsp;<a href=\"graf.php?m=$next_month&y=$next_yaer\">></a></span>";
    ?>
    </h3>
    <table height="200" width="100%" cellpadding="0" cellspacing="0" align="right">
    <tr valign="bottom" height="180">
    <?PHP
    // Max Month
    $abfrage=mysql_query("select LEFT(day,7) as month, sum(user) as user_month from ".$db_prefix."Day GROUP BY month ORDER BY user_month DESC LIMIT 1");
    $max_month=mysql_result($abfrage,0,1);
    // Monat abfragen
    $bar_nr=0;
    for($month=1; $month<=12; $month++)
        {
        $sel_timestamp = mktime(0, 0, 0, $month, 1, $show_year);
        $sel_month = date("Y.m.%",$sel_timestamp);
        $abfrage=mysql_query("select sum(user) from ".$db_prefix."Day where day LIKE '$sel_month'");
        $User=mysql_result($abfrage,0,0);
        mysql_free_result($abfrage);
        
        $bar[$bar_nr]=$User; // Im Array Speichern
        $bar_title[$bar_nr] = date("M.Y",$sel_timestamp);
        $bar_month[$bar_nr]=$month;
        
        $bar_nr++;
        }
    // Diagramm         
    for($i=0; $i<$bar_nr; $i++)
        {
        $value=$bar[$i];
        if ($value == "") $value = 0;
        if ($max_month > 0) {$bar_hight=round((170/$max_month)*$value);} else $bar_hight = 0;
        if ($bar_hight == 0) $bar_hight = 1;    

        echo "<td width=\"38\">";
        echo "<a href=\"history.php?m=".$bar_month[$i]."&y=$show_year\">";
        echo "<div class=\"bar\" style=\"height:".$bar_hight."px;\" title=\"".$bar_title[$i]." - $value Visitors\"></div>";
        echo "</a></td>\n";
        }
    ?>
    </tr><tr height="20">
     <td colspan="3" width="25%" class="timeline"><?PHP echo date("M.Y",mktime(0, 0, 0, 1, 1, $show_year)); ?></td>
    <td colspan="3" width="25%" class="timeline"><?PHP echo date("M.Y",mktime(0, 0, 0, 4, 1, $show_year)); ?></td>
    <td colspan="3" width="25%" class="timeline"><?PHP echo date("M.Y",mktime(0, 0, 0, 7, 1, $show_year)); ?></td>
    <td colspan="3" width="25%" class="timeline"><?PHP echo date("M.Y",mktime(0, 0, 0, 10, 1, $show_year)); ?></td>
    </tr></table>
Darker
Profil
setlocale(LC_ALL, "cs_CZ.UTF-8");
define ('DTFORMAT', '%h. %Y');
echo strftime (DTFORMAT, time());

Také jsem se s tím potrápil. Setlocale nemá vliv na funkci date, musíš použít strftime.
pito
Profil
Děkuji :)
pito
Profil
Potřeboval bych ještě něco,ale nevím jestli to mohu tady taky vložit.

Ten cely kod viz.[#1] tak by mi měl ukázat počet návštěv za daný měsíc (vytvoří se mi tak sloupcový graf) ,ale problém je,že mi to nefunguje.

Nevím jestli to může být třeba zápisem datumu v databázi,protože na začátku jsem měl ukladání datumu přes varchar a vypadalo to takhle: 2012.03.18 ale potřeboval jsem to změnit na date tedy 2012-03-18 a od toho času myslím to přestalo fungovat.


Ještě jsem zapomněl dodat, že mám i měsíční graf a tam to vše funguje i po změně datumu v databázi.Tak nevím.
Darker
Profil
No tak jsi to asi změnil špatně... Podívej se do tabulky a zjisti, co tam teď je. Ani jsi neřekl jak se nefunkčnost projevuje.
pito
Profil
Je to nastavené na date jak říkám.
No projevuje se to tak že se mi nevypisuje žádná hodnota (počet návštěv)
Darker
Profil
A v tabulce jsou jaká data? Pokud problém způsobil převod ze stringu na date asi bude problém v převodu...
pito
Profil
                 id    day    user    view
            2441    2012-04-21    5    1
            2440    2012-04-20    1    0
            2439    2012-04-19    2    0
atd...

Jenže to nemůžu zase vrátit typ varchar
Tori
Profil
pito:
Na ř.9 máte překlepy: $back_yaer
Ř.16 teď bude
mysql_query("select YEAR(`day`) as y, MONTH(`day`) as m, SUM(user) as user_month from ".$db_prefix."Day 
GROUP BY y, m ORDER BY user_month DESC LIMIT 1");
$max_month=mysql_result($abfrage, 0, 2);
- při větší návštěvnosti bych uvažovala o tom, předpočítat si celkové počty uživatelů za měsíc do samostatné tabulky.

Od řádku 20 do 46 bych to přepsala tak, aby stačil jen jeden SQL dotaz.

$month_names = array(1=>'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čer', 'Čec', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro');

$result = mysql_query("select month(`day`) 'month', sum(user) 'num_users' from ".$db_prefix."Day 
  where `day` BETWEEN '$show_year-01-01' AND '$show_year-12-31' GROUP BY `month`");
$bar = array();
$last_month = 1; // poslední/nejnovější měsíc, ke kterému dotaz vrátí počet návštěvníků
// (pokud bude za měsíc nula návštěvníků, tak se ten měsíc ve výsledku vůbec neobjeví)
while ($row = mysql_fetch_assoc($result)) {
  $bar[$row['month']] = array(
    'num_users' => $row['num_users'],
    'title' => $month_names[$row['month']],
  );
}
$last_month = !empty($row) ? $row['month'] : $last_month;

// Diagramm         
    for($i=1; $i <= $last_month; $i++)
    {
        $value = !isset($bar[$i]['num_users']) ? 0 : $bar[$i]['num_users'];
        if ($max_month > 0) {$bar_hight=round((170/$max_month)*$value);} else $bar_hight = 0;
        if ($bar_hight == 0) $bar_hight = 1;    
 
        echo "<td width=\"38\">";
        echo "<a href=\"history.php?m=".$i."&y=$show_year\">";
        echo "<div class=\"bar\" style=\"height:".$bar_hight."px;\" title=\"".$bar[$i]['title']." - $value Visitors\"></div>";
        echo "</a></td>\n";
    }
Chtěla jsem ušetřit ty převody měsíců na text oklikou přes timestamp, ale jestli to nebude znatelně zpomalovat, tak je tam klidně nechte.
pito
Profil
zkoušel jsem to jak jste napsala,ale spočitá mi to jen za leden další měsíce jsou prázdne políčka


Omlouvám se už je to opraveno :)
Děkuji moc za pomoc


Ještě bych se potřeboval dostat k tomu druhému přispěvku [#2] Darker
Funguje mi to,ale u návštěvnosti za měsíc mi to blbne.

měsíc návštěvnost
    <td colspan="5" width="10%" class="timeline"><?PHP echo date("j.M",mktime(0, 0, 0, $show_month, 1, $show_yaer)); ?></td>
    <td colspan="5" width="10%" class="timeline"><?PHP echo date("j.M",mktime(0, 0, 0, $show_month, 6, $show_yaer)); ?></td>
    <td colspan="5" width="10%" class="timeline"><?PHP echo date("j.M",mktime(0, 0, 0, $show_month, 11, $show_yaer)); ?></td>

udělal jsem to stejným postupem jak tady [#2]

<td colspan="5" width="10%" class="timeline"><?PHP  $timeStamp = mktime(0, 0, 0, $show_month, 1, $show_yaer); setlocale(LC_ALL, "cs_CZ.UTF-8"); define ('DTFORMAT', '%j %b'); echo strftime (DTFORMAT, $timeStamp);      ?></td>

bude to fungovat jenže když nastavím ten formát datumu %j %b tak se mi to změní i u tabulky kde mám ty návštěvy za rok.
pito
Profil
hm
Medvídek
Profil
pito:
Tak si prostuduj, co dělá define ('DTFORMAT', '%j %b');
http://php.net/manual/en/function.define.php
Konstanta totiž nejde přepsat viz:

<?php
DEFINE("NAME","Petra");
echo NAME."<br />";
DEFINE("NAME","Lukáš");
echo NAME."<br />";
DEFINE("NAME","Jirka");
echo NAME."<br />";
?>
a výstup bude:
Petra
Petra
Petra
pito
Profil
Tak jsem se díval. Jinak by to asi nešlo vyřešit něž přes to define?
Medvídek
Profil
pito:
Tak pokud si se díval, buďto použij jiný název v DEFINE než již registrovaný DTFORMAT, nebo to napiš přímo do té fce:

echo strftime ("%j %b", $timeStamp);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: