Laiko žymės

Iš GTA-Online Wikipedia.
Peršokti į: navigaciją, paiešką
Autorius: Britas
2012-04-16

Turinys

Įžanga

Sveiki visi. Labai maža auditorija savo serveriuose naudoja timestamp (laiko žymes), nors jos yra paprastesnės daug, daug kartų, todėl kad visi suprastu kas tai ir „su kuo tai valgoma“, padarysiu pamoką.

Apie

Timestamp - laiko trukmė nuo 1970 metų. Tai sveikas skaičius kuris nurodo kiek sekundžių praėjo nuo 1970 Saus. 01 dienos. Timestamp išgauta reikšmė atrodo panašiai į tai: 1335787467.

Timestamp išgavimas, reikšmės

Šio momento timestamp sveikąjį skaičių galite išgauti labai paprastai, tai naudojama vienos funkcijos - gettime veikimu.

Pavyzdys:

main()
{
        new Dabar = gettime(); /* Išgauname kiek praėjo sekundžių nuo 1970 metų iki dabar. */
        printf("Šio momento timestamp reikšmė: %d.",Dabar); /* Reikšmę atvaizduojame konsolėje. */
}

Laiko tarpai

Timestamp asmeniškai aš naudoju kontraktuose, vip galiojimuose, įspėjimų galiojimuose, banuose ir visa tai yra labai lengvai pritaikyti, tereikia žinoti kiek diena, savaitė, ar mėnesis turi sekundžių.

  • 1 minutė = 60 sekundžių
  • 1 valanda = 3600 sekundžių
  • 1 para = 86400 sekundžių
  • 1 savaitė = 604800 sekundžių
  • 1 mėnuo = 2592000 sekundžių
  • 1 metai = 31536000 sekundžių

Pavyzdys:

main()
{
        new Dabar = (gettime() + 2592000); /* Išgauname kiek praėjo sekundžių nuo 1970 metų iki dabar ir pridedame 1 mėnesį. */
        printf("Prie šiandien dienos pridėjus + 1 mėnesį gauname: %d.",Dabar); /* Reikšmę atvaizduojame konsolėje. */
}

Naudojimas

Patikrinimas ar timestamp nustatytas laikas jau pasibaigė yra gan paprasta. Reikės mums tik vienos funkcijos kur yra default, tai - gettime.

Kaip tikrinti? Tikrinti reikėtų taip. Jeigu dabartinė timestamp reikšmė yra didesnė už įrašytą prieš į kintamąjį, reiškiasi laikas pasibaigė ir vykdome ten veiksmą.

Pavyzdys:

if(gettime() >= VIPlaikas[playerid]) /* Tikriname ar dabartinė reikšmė didesnė už kintamąjame esanti. */
{
        if(VIPlaikas[playerid] <= 0) return 1; /* Jeigų VIP laiko nėra - veiksmas baigiamas. */
        SendClientMessage(playerid,0xFFFFFFFF,"* Jūsų VIP statuso galiojimo laikas pasibaigė.");
        VIPlaikas[playerid] = 0; /* VIPo galiojimo laiką nuimame. */
        return 1;
}

MySQL

SQL taip pat turi timestamp galimybę savo kalboje. Iškviesti dabartinę timestamp reikšmę galite naudojant funkciją UNIX_TIMESTAMP().

Pavyzdys:

mysql_query("UPDATE `table` SET `Vipas`=UNIX_TIMESTAMP() + 31536000");

p.s. šis variantas skirtas siunčiant tiesiogiai (php/phpmyadmin) užklausas, ne iš serverio.

Asmeniniai įrankiai
San Andreas Multiplayer