funkcia/trieda na zistenie casu v zadanom state

Programovacie jazyky, rady, poradňa...
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

funkcia/trieda na zistenie casu v zadanom state

Príspevok od používateľa final »

zdravím,

momentálne hľadám na nete (celkom dlllllho) triedu/funkciu v php, ktorá by mi vracala podľa skratky štátu jeho lokálny čas.. alebo len časový rozdiel medzi aktuálne nastaveným časom na serveri ..
s tým, že by tam bol každý štát, trebars pre usa - ny, rusko - (tie jeho oblasti či čo to zač tam majú, skoro každá je v inej časovej zóne), atď..
ale nič nemôžem nájsť..
nemáte niečo také? alebo kde by som to našiel..

ono, aby som ju išiel teraz robiť, by ma asi hodilo o zem, keď človek zoberie ten X počet štátov, ku každému nastaviť hodnotu gmt, niektoré ešte majú posun času, na to som moc lenivý..

taká otázka ešte, tu v registrácií je výber GMT, ale akosi tomu nerozumiem.. vyberiem trebars +1, čiže všetky štáty ktoré majú gmt+1 majú aj posun času? lebo keby nie, tak by to bolo chybné ak sa nemýlim.. som to tak chcel spraviť, ale sa mi to nezdá..

thx

(tomasmate: ja píšem tu)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

poviem pravdu s nicim podobnym som sa nestretol. uvazoval som vsak nad riesenim tohto problemu, a narazil som na problem. Kazdu krajinu chces reprezentovat skratkou. To je v poriadkuv pripade, ze sa cela krajina nachadza v jednom casovom pasme. No co napriklad v pripade Ruska? co ti ma dany kod vracat?
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

jo, asi to vzdávam.. rusko, argentína a podobné.. určité ich mestá majú iné časy a to sa ani nedá označiť ako oblasť.. (alebo dá?, neviem radšej to už neriešim)..

cez deň som sa hral s putenv, kde som nastavoval časovú zónu pre server, ale nemohol nájsť funkciu ktorá by to nastavovala len pre script.. to sa mi až teraz podarilo (vďaka nejakej stránke)... ovplyvňuje funkciu date() a podobné..

http://sk.php.net/manual/en/function.da ... ne-set.php
a k nej
http://sk.php.net/manual/en/timezones.php

asi celý ten zoznam hodím do selectu, k vybranej položke zobrazím aký je aktuálny čas tam a nech si vyberie človek čo chce..

štve ma, že to uživateľa bude otravovať, ten výber a na druhú stranu to môže byť nepresné, trebars argentína, pre príklad: 2 mestá, a človek býva v meste medzi nimi (ktoré nie je v zozname).. ktoré z nich má vybrať? jedine asi ten informatívny čas to zachráni.. ale celé to výjde na vonok ako otravná gebuzina..

ešte by možno bolo dobré, že sa defaultne označí lokácia, podľa lokácie IPčky, a cez javascript sa doladí podľa času počítača časová zóna.. samo. len pre tie štáty s rôznymi pásmami..
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

ked mas na stranke uzivatelov s nejakymi kontaktami, urcite by som to riesil tak, ze pri registracii si vyberie casove pasmo, pripadne zaskrtne ci tam je letny a zimny cas a je to vyriesene.
gwixt
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3912
Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can

Príspevok od používateľa gwixt »

IgiPoP
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 446
Registrovaný: 12 sep 2005, 8:17
Bydlisko: MT

Príspevok od používateľa IgiPoP »

rozdiel medzi GMT a lokalnym casom uzivatela si vies zistit prostrednictvom JavaScriptu

Kód: Vybrať všetko

var localTime = new Date();
var localZone = localTime.getTimezoneOffset();
a po zisteni moze na pozadi rebehnut request (AJAX), kde si posles tuto informaciu na server.

ak ti vsak ide iba o vypisanie serveroveho casu upraveneho na lokalitu uzivatela, kludne sa o to moze postarat samotny JavaScript s pomocou PHP:

Kód: Vybrať všetko

// php file
<?php 
preg_match("/^([+|\-]{1})([0-9]{2})([0-9]{2})$/",date("O"), $matches);
$minut = $matches[1].(((int)$matches[2]*60)+(int)$matches[3]); //*(int)($matches[1].1);
$GMT = date( "m d Y H:i:s", mktime( date("H"), date("i")-$minut) );
?>
<html>
<head>
  <title>Hodiny podla servera v kazdej casovej zony</title>
  <script type="text/javascript">
    var serverTimeString = "<?=$GMT ?>"; // mesiac den rok ....
    var serverTime = Date.parse(serverTimeString);
    serverTime = new Date(serverTime);

    var localTime = new Date();
    var localZone = localTime.getTimezoneOffset();

    serverTime.setMinutes(serverTime.getMinutes() - localZone );

    function showGoodTime()
    {
      serverTime.setSeconds(serverTime.getSeconds() + 1);
      var hours = serverTime.getHours().toString();
      if( hours.length == 1 )
        hours = "0" + hours; 
      var minutes = serverTime.getMinutes().toString();
      if( minutes.length == 1 )
        minutes = "0" + minutes; 
      var seconds = serverTime.getSeconds().toString();
      if( seconds.length == 1 )
        seconds = "0" + seconds;

      document.getElementById('clock').innerHTML = hours + ":" + minutes + ":" + seconds; 
    } 

  </script>
</head>
<body>
  <span id="clock"></span>
  <script type="text/javascript">
    showGoodTime();
    var ourInterval = setInterval("showGoodTime()", 1000);
  </script>
  </body>
</html>
mozno som nepochopil, co presne chces, tak daj vediet.
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

nie, cez js to nechcem robiť, človek si zmení čas na pc, čo potom..

použiť to chcem na.. príklad: rezervuješ si hotel tam a tam, na presný dátum a čas, ten čas sa ale uvádza v tvojej časovej zóne (čiže do toho spadajú aj prechody času), ten sa vezme, vypočíta sa v tvojej časovej zóne rozdiel sekúnd od aktuálneho času po rezervovaný čas (taktiež vrátane prechodov) a ten sa potom pripočíta k unixovému razítku na serveri a uloží do DB..
druhý príklad: 2 ľudia z rôznych lokalít spolu komunikujú, obom sa zobrazuje aj čas s kým píše, tam by ten js celkom pasol, ale môže to byť nepresné, príde mi to sry - amatérske..

k tomu php - ako som to chcel použiť.. ku každému štátu som pridelil hlavné mestá z toho zoznamu (dosť z nich tam chýba), a také usa, tipujem tak 3-4 štáty sú tam.. pravdepodobne preto, lebo chystajú meniť posun času..

mastermind, tak to veru nemôžem použiť.. som zistil, že ten posun času nie je rovnaký, skoro všade to majú inak..

riešenie? vlastniť zemeguľu a globálne zrušiť posun času :)

ja už netuším, som z toho zúfalý..
final
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 04 dec 2005, 11:43
Bydlisko: Prievidza

Príspevok od používateľa final »

:D
http://www.anicon.ca/timezone-script.php

ešte tam aj píše, že to (snaď) upravý akonáhle usa pomení tie prechody.. a vyzerá to tak, že to funguje skvele, až na tú hodinu v noci čo spomína.. ešte to poprispôsobujem pre seba a..
idem mu poďakovať X krát :D ale díkes aj vám :)
Napísať odpoveď