Есть ли встроенная функция или какой-то элегантный способ получить количество дней в текущем месяце с помощью MQL4?
Или, в качестве альтернативы, есть ли способ определить последний понедельник текущего месяца?
Есть ли встроенная функция или какой-то элегантный способ получить количество дней в текущем месяце с помощью MQL4?
Или, в качестве альтернативы, есть ли способ определить последний понедельник текущего месяца?
A1: Нет, для этого нет встроенной функции.
A2: Да, есть несколько элегантных способов решить эту проблему. Можно было бы так:
int HowManyDaysInMONTH = { EMPTY,// stump
31, // Jan
28, // Feb + int LeapYear( const int aDate ){...}
31, // Mar
30, // Aug
31, // May
30, // Jun
31, // Jul
31, // Aug
30, // Sep
31, // Oct
30, // Nov
31 // Dec
};
//-------------------------------------------------------------+
int LeapYear( const int aDateToTEST ){
return ( 366 == TimeDayOfYear( StringToTime( StringFormat( "%4d.12.31", TimeYear( aDateToTEST ) ) ) ) ? 1
: 0
)
}
//-------------------------------------------------------------+
PrintFormat( "This month has %d days",
HowManyDaysInMONTH[TimeMonth( aDateTODAY )]
);
A3: В качестве альтернативы можно реализовать такую комбинацию.
bool IsLastMondayOfMONTH( const int aDateTODAY ){
return ( TimeDayOfWeek( aDateTODAY ) != 1 ? False
: TimeMonth( aDateTODAY ) == TimeMONTH ( aDateTODAY + 7 ) ? False
: True
);
}
это то, что я использовал:
bool isLeapYear(const int _year){
if(_year%4 == 0){
if(_year%400 == 0)return true;
if(_year%100 > 0)return true;
}
return false;
}
int getDaysInMonth(MqlDateTime &mql){
if(mql.mon==2)
return 28+isLeapYear(mql.year);
return 31-((mql.mon-1)%7)%2;
}
//your function to get number of days:
MqlDateTime mql;
TimeToStruct(TimeCurrent(),mql);
int days = getDaysInMonth(mql); //result that you are looking for