←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Sprawdzanie czasu "get_systime"

Zablokowany

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Chciałbym za pomocą get_systime zrobić, żeby plugin sprawdzał, czy jakiś czas już minął, coś takiego jak w przypadku adminów w gm amxbans. Wiem jak przeliczyć konkretną datę na sekundy, ale miesiąc nie ma przecież zawsze 30 dni, no i właśnie tutaj nie bardzo wiem, jak ta funkcja podana wyżej radzi sobie z tą zmienną ilością dni w miesiącu... Może jednak nie trzeba patrzyć na to i każdy miesiąc mnożyć przez 30? A może jest jakaś funkcja co przelicza datę na sekundy? Oczywiście wiem też, że "get_systime" zwraca czas w sekundach od 1970 roku, czyli trzeba tyle lat odjąć od daty, którą będzie się przeliczać na sekundy.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 09.09.2011

datę w sekundach na taką czytelną dla człowieka możesz zamienić funkcją format_time
http://www.amxmodx.o...func&id=250

ostatni parametr to właśnie znacznik czasu, -1 możesz traktować jak podanie get_systime()


w drugą stronę działa funkcja parse_time http://www.amxmodx.o...func&id=252
na podstawie daty liczy ile sekund od 1970

w obu przypadkach potrzebny jest zapis formatu, przy jednej z tych funkcji jest fajna rozpiska, taki format to zwykły string tylko w miejsca na odpowiednie informacje umieszcza się te oznaczenia %CUŚ

%a abbreviated weekday name (Sun)
%A full weekday name (Sunday)
%b abbreviated month name (Dec)
%B full month name (December)
%c date and time (Dec 2 06:55:15 1979)
%d day of the month (02)
%H hour of the 24-hour day (06)
%I hour of the 12-hour day (06)
%j day of the year, from 001 (335)
%m month of the year, from 01 (12)
%M minutes after the hour (55)
%p AM/PM indicator (AM)
%S seconds after the minute (15)
%U Sunday week of the year, from 00 (48)
%w day of the week, from 0 for Sunday (6)
%W Monday week of the year, from 00 (47)
%x date (Dec 2 1979)
%X time (06:55:15)
%y year of the century, from 00 (79)
%Y year (1979)




PS samo sprawdzenie relacji dat możesz zrobić na poziomie znacznika czasu, bez przeliczania na czytelną datę
Użytkownik R3X edytował ten post 09.09.2011 01:01
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Coś post się rozwalił ^^ Może jeszcze napiszę, że aktualnie korzystam z czegoś takiego, że w jednym miejscu podaje datę wygaśnięcia (np. 2011-11-11), przerabiam to na liczbę, a potem w pluginie formatuje aktualną datę też w takim samym układzie (rok-miesiąc-dzień) i porównuje, czy jedna data jest większa od drugiej. Chciałbym to zamienić na takie coś, że podaje datę, a potem ile dni ma być coś aktywne, tak jak już pisałem, tak jak to jest w amxbansie przy korzystaniu z adminów z bazy.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 09.09.2011

No to dodawaj sekundy :)
teraz = get_systime()
teraz+minuta = get_systime() + 60;
teraz+godzina= get_systime() + 60*60;
teraz+dzień = get_systime() + 24*60*60;
teraz+10 dni = get_systime() + 10*24*60*60;
teraz+miesiąc= get_systime() + 30*24*60*60;
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Co do tego "parse_time", to mam rozumieć, że jak zrobię takie coś
new sekundy;
parse_time("2011-11-11", "%Y-%m-%d", sekundy);

to zmienna "sekundy" będzie równa sekundom ile upłynęło od 1970 roku do daty podanej w funkcji?

No to dodawaj sekundy :)
teraz = get_systime()
teraz+minuta = get_systime() + 60;
teraz+godzina= get_systime() + 60*60;
teraz+dzień = get_systime() + 24*60*60;
teraz+10 dni = get_systime() + 10*24*60*60;
teraz+miesiąc= get_systime() + 30*24*60*60;

Czyli jednak nie zwracać na to uwagi, że miesiące nie są zawsze równe?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 09.09.2011

W parse ostatni parametr jest ewentualnie dodawany do wyniku, nie ma referencji.
new sekundy = parse_time("2011-11-11", "%Y-%m-%d");


To jest kwestia umowy. Czego oczekujesz gdy ktoś mówi za miesiąc stracisz admina?
Jak nie chcesz dać na 30 dni to pobierz sam numer miesiąca w format_time() i zmień na liczbę.
Z tym możesz już zrobić dużo, np. znaleźć w tablicy ilość dni w następnym miesiącu (zobacz constraint_offset) i użyj tej wartości zamiast '30'.
Użytkownik R3X edytował ten post 09.09.2011 02:03
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 09.09.2011

Już wszystko działa, tylko teraz jak wykorzystać "format_time" do tego, aby zamienić sekundy na normalną datę?
format_time(zmienna, charsmax(zmienna), "%Y-%m-%d", ile_dni_do_konca*24*60*60);

Coś takiego?

Chyba już wiem
format_time(zmienna, charsmax(zmienna), "%Y-%m-%d", data_kiedy_sie_konczy);

To będzie coś takiego? W ostatnim parametrze podajemy sekundy, a funkcja zapisuje do zmiennej datę tych sekund?

Można zamknąć.
Użytkownik sebul edytował ten post 09.09.2011 13:04
Odpowiedz

Adminek AMXX.PL - zdjęcie Adminek AMXX.PL 09.09.2011

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: odpowiedz udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany