Скачать MetaTrader 5

Можно ли как-то узнать количество дней в месяце средствами MQL?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Размести программу в Маркете - это 7 миллионов потенциальных клиентов
Ant
65
Ant 2012.01.05 09:51 

Привет. Есть желание менять поведение эксперта в два последних дня месяца. Конечно, можно применять логику к 30 и 31 числу, и в большинстве случаев это будет работать. Но, сами понимаете, хотелось бы чего-то красивее. Обычно везде есть функции типа DaysInMonth(), в справке не нашёл ничего подобного. Задача вроде должна быть распространённой, как в народе такое решается?

Благодарю за помощь.

Vadim Zhunko
5226
Vadim Zhunko 2012.01.05 09:57  
Так оно и так известно. В зависимости от високосности и номера месяца доставать из массива. Потребуется 2 массива с високосными числами и невисокосными числами.
Комбинатор
15919
Комбинатор 2012.01.05 10:02  

0. Ложим на советы предыдущего оратора.

1. Берем 1 числа текущего месяца.

2. прибавляем 31 день.

3. Берем 1 числа следующего месяца

4. сравниваем 1 и 3

PapaYozh
3768
PapaYozh 2012.01.05 10:20  
TheXpert:

0. Ложим на советы предыдущего оратора.

Извините, но - "кладём".
Vadim Zhunko
5226
Vadim Zhunko 2012.01.05 10:23  
Зачем вычислять то, что уже известно? Для этого массивы есть. Это проще, наглядно. Отсутствие вычислений это отсутствие ошибок и отладки кода. Не говорю, что это существенно более быстрые операции.
Victor Nikolaev
Модератор
14485
Victor Nikolaev 2012.01.05 10:25  

Я бы взял первое число следующего месяца и отнял (вычел) два дня

PapaYozh
3768
PapaYozh 2012.01.05 10:29  
alex_ant:

Привет. Есть желание менять поведение эксперта в два последних дня месяца. Конечно, можно применять логику к 30 и 31 числу, и в большинстве случаев это будет работать. Но, сами понимаете, хотелось бы чего-то красивее. Обычно везде есть функции типа DaysInMonth(), в справке не нашёл ничего подобного. Задача вроде должна быть распространённой, как в народе такое решается?

Благодарю за помощь.


А если один из этих дней или даже оба последних дня являются выходными?
Dmitry Fedoseev
42882
Dmitry Fedoseev 2012.01.05 10:37  
int dim(int m,int y){ // m - месяц от 1 до 12, y - год
   int d=30+(m+(m>7))%2-(m==2)*(1+((y%4)!=0));
   return(d);
}

исправлено
PapaYozh
3768
PapaYozh 2012.01.05 10:46  
Integer:

В этом коде точно нет ошибок?
Dmitry Fedoseev
42882
Dmitry Fedoseev 2012.01.05 10:51  
PapaYozh:

В этом коде точно нет ошибок?

В каких-то случаях неправильно считает?
Vadim Zhunko
5226
Vadim Zhunko 2012.01.05 10:51  
Одна ошибка точно есть. Неправильно високосность вычисляется.
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий