Как определить день недели?

Сообщения
92
Реакции
23
Всем привет. Кто-нибудь знает как определить текущий день недели в плагине?:blush2:
 
Сообщения
90
Реакции
126
Помог
3 раз(а)
Для любой даты григорианского календаря позднее 1583 года, на практике не проверял, отсчет идет от воскресенья, то есть 0 - воскресенье, 1 - понедельник и т. д.
Код:
new a = (14 - month) / 12;
new y = year - a;
new weekday = (day + y + y / 4 - y / 100 + y / 400 + (31 * (month + 12 * a - 2))) / 12) % 7;
 
Последнее редактирование:
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
by OciXCrom
Код:
#include <amxmodx>

#define PLUGIN_VERSION "1.0"

new const g_szCycles[][] = {
    "monday",    "mapcycle1.txt",
    "tuesday",    "mapcycle2.txt",
    "wednesday",    "mapcycle1.txt",
    "thursday",    "mapcycle2.txt",
    "friday",    "mapcycle1.txt",
    "saturday",    "mapcycle1.txt",
    "sunday",    "mapcycle2.txt"
}

public plugin_init() register_plugin("DayCycles", PLUGIN_VERSION, "OciXCrom")

public plugin_end() {
    new szDay[10]
    get_time("%A", szDay, charsmax(szDay))

    for (new i; i < sizeof(g_szCycles) - 1; i += 2) {
        if (equal(szDay, g_szCycles[i]))
            set_cvar_string("mapcyclefile", g_szCycles[i + 1])
    }
}
https://dev-cs.ru/amxx/amxmodx/get_time/view
http://www.cplusplus.com/reference/ctime/strftime/
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
Для любой даты григорианского календаря позднее 1583 года, на практике не проверял, отсчет идет от воскресенья, то есть 0 - воскресенье, 1 - понедельник и т. д.
Код:
new a = (14 - month) / 12;
new y = year - a;
new weekday = (day + y + y / 4 - y / 100 + y / 400 + (31 * (month + 12 * a - 2))) / 12) % 7;
Что это за жесть?
 
Сообщения
90
Реакции
126
Помог
3 раз(а)
shadow, Алгорит расчета дня недели, я думал раз ТС этот вопрос задает, то в АМХ нет функционала для получения дня недели, оказывается ТС просто плохо искал, wopox1337 привел нормальный вариант
 
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
Что это за жесть?
https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week
1535888991602.png

:haha:
C++:
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;


int d;
int m;
int y;


string weekday(int d, int m, int y){
    int LeapYears = (int) y/ 4;
    long a = (y - LeapYears)*365 + LeapYears * 366;
    if(m >= 2) a += 31;
    if(m >= 3 && (int)y/4 == y/4) a += 29;
    else if(m >= 3) a += 28;
    if(m >= 4) a += 31;
    if(m >= 5) a += 30;
    if(m >= 6) a += 31;
    if(m >= 7) a += 30;
    if(m >= 8) a += 31;
    if(m >= 9) a += 31;
    if(m >= 10) a += 30;
    if(m >= 11) a += 31;
    if(m == 12) a += 30;
    a += d;
    int b = (a - 2)  % 7;
    switch (b){
    case 1:
        return "Monday";
    case 2:
        return "Tuesday";
    case 3:
        return "Wednesday";
    case 4:
        return "Thursday";
    case 5:
        return "Friday";
    case 6:
        return "Saturday";
    case 7:
        return "Sunday";
    }
}

int main(){
    cin >> d >> m >> y;
    cout << weekday(d, m, y);
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу