TimeUtils/advanced.mq5

335 lines
28 KiB
MQL5
Raw Permalink Normal View History

2025-09-19 20:26:04 +00:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| advanced.mq5 |
//| Copyright <EFBFBD> 2024, Amr Ali |
//| https://www.mql5.com/en/users/amrali |
//+------------------------------------------------------------------+
// optionally adjust performance via #defines before #include
// enable performance mode for library
//#define TIMEUTILS_PERFORMANCE_MODE
#include "TimeUtils.mqh"
int counter = 0;
#define PRINT(A) Print((string)++counter + ". " + #A + " = ", (A))
void OnStart()
{
//+==================================================================+
//| Create datetime From Components |
//+==================================================================+
PRINT( CreateDateTime(2022, 03, 25) );
//+==================================================================+
//| Break datetime To Components |
//+==================================================================+
MqlDateTime st[1] = {};
TimeToStructFast(TimeCurrent(), st[0]);
ArrayPrint(st);
//+==================================================================+
//| Extract Components of datetime: Sunday, yyyy.mm.dd hh:mm:ss |
//| Get() Units |
//+==================================================================+
datetime t = TimeLocal();
PRINT( t2s(t, TIME_DATE|TIME_SECONDS) ); // Formats time with the weekday name
PRINT( GetYear(t) );
PRINT( GetMonth(t) );
PRINT( GetDay(t) );
PRINT( GetHour(t) );
PRINT( GetMinute(t) );
PRINT( GetSecond(t) );
//+==================================================================+
//| Day() Number |
//+==================================================================+
PRINT( DayOfWeek(t) );
PRINT( DayOfYear(t) );
PRINT( DayIndex(t) );
//+==================================================================+
//| Week() Number |
//+==================================================================+
PRINT( WeekOfMonth(t) );
PRINT( WeekOfYear(t) );
PRINT( WeekIndex(t) );
PRINT( WeekOfMonth(t, true) ); // StartsOnMonday = true
PRINT( WeekOfYear(t, true) ); // StartsOnMonday = true
PRINT( WeekIndex(t, true) ); // StartsOnMonday = true
//+==================================================================+
//| StartOf() Units |
//+==================================================================+
PRINT( StartOfMinute(t) );
PRINT( StartOfHour(t) );
PRINT( StartOfDay(t) );
PRINT( StartOfWeek(t) );
PRINT( StartOfWeek(t, true) ); // StartsOnMonday = true
PRINT( StartOfMonth(t) );
PRINT( StartOfYear(t) );
//+==================================================================+
//| EndOf() Units |
//+==================================================================+
PRINT( EndOfMinute(t) );
PRINT( EndOfHour(t) );
PRINT( EndOfDay(t) );
PRINT( EndOfWeek(t) );
PRINT( EndOfWeek(t, true) ); // StartsOnMonday = true
PRINT( EndOfMonth(t) );
PRINT( EndOfYear(t) );
//+==================================================================+
//| SecsElapsedOf() Units |
//+==================================================================+
PRINT( SecsElapsedOfMinute(t) );
PRINT( SecsElapsedOfHour(t) );
PRINT( SecsElapsedOfDay(t) );
PRINT( SecsElapsedOfWeek(t) );
PRINT( SecsElapsedOfWeek(t, true) ); // StartsOnMonday = true
PRINT( SecsElapsedOfMonth(t) );
PRINT( SecsElapsedOfYear(t) );
//+==================================================================+
//| RoundTo() / Nearest() Units |
//+==================================================================+
PRINT( RoundToMinute(t) );
PRINT( RoundToHour(t) );
PRINT( RoundToDay(t) );
PRINT( RoundToWeek(t) );
PRINT( RoundToWeek(t, true) ); // StartsOnMonday = true
//+==================================================================+
//| CeilTo() / Next() Units |
//+==================================================================+
PRINT( CeilToMinute(t) );
PRINT( CeilToHour(t) );
PRINT( CeilToDay(t) );
PRINT( CeilToWeek(t) );
PRINT( CeilToWeek(t, true) ); // StartsOnMonday = true
//+==================================================================+
//| Next() Weekday |
//+==================================================================+
PRINT( NextSunday(t) );
PRINT( NextMonday(t) );
PRINT( NextTuesday(t) );
PRINT( NextWednesday(t) );
PRINT( NextThursday(t) );
PRINT( NextFriday(t) );
PRINT( NextSaturday(t) );
//+==================================================================+
//| Previous() Weekday |
//+==================================================================+
PRINT( PreviousSunday(t) );
PRINT( PreviousMonday(t) );
PRINT( PreviousTuesday(t) );
PRINT( PreviousWednesday(t) );
PRINT( PreviousThursday(t) );
PRINT( PreviousFriday(t) );
PRINT( PreviousSaturday(t) );
//+==================================================================+
//| Nth() Weekday Of The Month |
//+==================================================================+
PRINT( FirstWeekdayOfTheMonth(t, SUNDAY) );
PRINT( LastWeekdayOfTheMonth(t, SUNDAY) );
//+==================================================================+
//| Add() Units |
//+==================================================================+
PRINT( AddSeconds(t, 30) );
PRINT( AddMinutes(t, 30) );
PRINT( AddHours(t, 2) );
PRINT( AddDays(t, 10) );
PRINT( AddBusinessDays(t, 10) );
PRINT( AddWeeks(t, 4) );
PRINT( AddMonths(t, 2) );
PRINT( AddYears(t, 5) );
//+==================================================================+
//| Sub() Units |
//+==================================================================+
PRINT( SubSeconds(t, 30) );
PRINT( SubMinutes(t, 30) );
PRINT( SubHours(t, 2) );
PRINT( SubDays(t, 10) );
PRINT( SubBusinessDays(t, 10) );
PRINT( SubWeeks(t, 4) );
PRINT( SubMonths(t, 2) );
PRINT( SubYears(t, 5) );
//+==================================================================+
//| DifferenceIn() Units |
//+==================================================================+
PRINT( DifferenceInCalendarDays(t, AddWeeks(t, 9)) );
PRINT( DifferenceInBusinessDays(t, AddWeeks(t, 9)) );
PRINT( DifferenceInCalendarWeeks(t, AddWeeks(t, 9)) );
PRINT( DifferenceInCalendarWeeks(t, AddWeeks(t, 9), true) ); // StartsOnMonday = true
PRINT( DifferenceInCalendarMonths(t, AddWeeks(t, 9)) );
//+==================================================================+
//| IsSame() Units |
//+==================================================================+
PRINT( IsSameMinute(t, AddHours(t, 25)) );
PRINT( IsSameHour(t, AddHours(t, 25)) );
PRINT( IsSameDay(t, AddHours(t, 25)) );
PRINT( IsSameWeek(t, AddHours(t, 25)) );
PRINT( IsSameWeek(t, AddHours(t, 25), true) ); // StartsOnMonday = true
PRINT( IsSameMonth(t, AddHours(t, 25)) );
PRINT( IsSameYear(t, AddHours(t, 25)) );
//+==================================================================+
//| IsCurrent() Units |
//+==================================================================+
PRINT( IsCurrentMinute(t) );
PRINT( IsCurrentHour(t) );
PRINT( IsCurrentWeek(t) );
PRINT( IsCurrentWeek(t, true) ); // StartsOnMonday = true
PRINT( IsCurrentMonth(t) );
PRINT( IsCurrentYear(t) );
PRINT( IsToday(t) );
PRINT( IsTomorrow(t) );
PRINT( IsYesterday(t) );
//+==================================================================+
//| Misc |
//+==================================================================+
PRINT( IsLeapYear(2100) );
PRINT( DaysInMonth(2024, 2) );
PRINT( GetNthWeekdayInYearMonth(2024, 1, 1, SUNDAY) );
//+==================================================================+
//| Formating Time to String |
//+==================================================================+
PRINT( t2s(TimeCurrent()) );
PRINT( SecondsToString(SecsElapsedOfDay(TimeCurrent())) );
PRINT( TimeFormat(TimeCurrent(), "YYYY.MM.DD hh:mm") );
PRINT( TimeFormat(TimeCurrent(), "DDD, YYYY.MM.DD hh:mm:ss") );
PRINT( TimeFormat(TimeCurrent(), "D MMM YYYY, HH:mm a") );
}
//+------------------------------------------------------------------+
/*
example output:
1. CreateDateTime(2022, 03, 25) = 2022.03.25 00:00:00
[year] [mon] [day] [hour] [min] [sec] [day_of_week] [day_of_year]
[0] 2024 12 18 17 27 25 3 352
2. t2s(t, TIME_DATE|TIME_SECONDS) = Wed, 2024.12.18 18:27:25
3. GetYear(t) = 2024
4. GetMonth(t) = 12
5. GetDay(t) = 18
6. GetHour(t) = 18
7. GetMinute(t) = 27
8. GetSecond(t) = 25
9. DayOfWeek(t) = 3
10. DayOfYear(t) = 352
11. DayIndex(t) = 20075
12. WeekOfMonth(t) = 3
13. WeekOfYear(t) = 51
14. WeekIndex(t) = 2868
15. WeekOfMonth(t, true) = 4
16. WeekOfYear(t, true) = 51
17. WeekIndex(t, true) = 2868
18. StartOfMinute(t) = 2024.12.18 18:27:00
19. StartOfHour(t) = 2024.12.18 18:00:00
20. StartOfDay(t) = 2024.12.18 00:00:00
21. StartOfWeek(t) = 2024.12.15 00:00:00
22. StartOfWeek(t, true) = 2024.12.16 00:00:00
23. StartOfMonth(t) = 2024.12.01 00:00:00
24. StartOfYear(t) = 2024.01.01 00:00:00
25. EndOfMinute(t) = 2024.12.18 18:27:59
26. EndOfHour(t) = 2024.12.18 18:59:59
27. EndOfDay(t) = 2024.12.18 23:59:59
28. EndOfWeek(t) = 2024.12.21 23:59:59
29. EndOfWeek(t, true) = 2024.12.22 23:59:59
30. EndOfMonth(t) = 2024.12.31 23:59:59
31. EndOfYear(t) = 2024.12.31 23:59:59
32. SecsElapsedOfMinute(t) = 25
33. SecsElapsedOfHour(t) = 1645
34. SecsElapsedOfDay(t) = 66445
35. SecsElapsedOfWeek(t) = 325645
36. SecsElapsedOfWeek(t, true) = 239245
37. SecsElapsedOfMonth(t) = 1535245
38. SecsElapsedOfYear(t) = 30479245
39. RoundToMinute(t) = 2024.12.18 18:27:00
40. RoundToHour(t) = 2024.12.18 18:00:00
41. RoundToDay(t) = 2024.12.19 00:00:00
42. RoundToWeek(t) = 2024.12.22 00:00:00
43. RoundToWeek(t, true) = 2024.12.16 00:00:00
44. CeilToMinute(t) = 2024.12.18 18:28:00
45. CeilToHour(t) = 2024.12.18 19:00:00
46. CeilToDay(t) = 2024.12.19 00:00:00
47. CeilToWeek(t) = 2024.12.22 00:00:00
48. CeilToWeek(t, true) = 2024.12.23 00:00:00
49. NextSunday(t) = 2024.12.22 00:00:00
50. NextMonday(t) = 2024.12.23 00:00:00
51. NextTuesday(t) = 2024.12.24 00:00:00
52. NextWednesday(t) = 2024.12.25 00:00:00
53. NextThursday(t) = 2024.12.19 00:00:00
54. NextFriday(t) = 2024.12.20 00:00:00
55. NextSaturday(t) = 2024.12.21 00:00:00
56. PreviousSunday(t) = 2024.12.15 00:00:00
57. PreviousMonday(t) = 2024.12.16 00:00:00
58. PreviousTuesday(t) = 2024.12.17 00:00:00
59. PreviousWednesday(t) = 2024.12.11 00:00:00
60. PreviousThursday(t) = 2024.12.12 00:00:00
61. PreviousFriday(t) = 2024.12.13 00:00:00
62. PreviousSaturday(t) = 2024.12.14 00:00:00
63. FirstWeekdayOfTheMonth(t, SUNDAY) = 2024.12.01 00:00:00
64. LastWeekdayOfTheMonth(t, SUNDAY) = 2024.12.29 00:00:00
65. AddSeconds(t, 30) = 2024.12.18 18:27:55
66. AddMinutes(t, 30) = 2024.12.18 18:57:25
67. AddHours(t, 2) = 2024.12.18 20:27:25
68. AddDays(t, 10) = 2024.12.28 18:27:25
69. AddBusinessDays(t, 10) = 2025.01.01 18:27:25
70. AddWeeks(t, 4) = 2025.01.15 18:27:25
71. AddMonths(t, 2) = 2025.02.18 18:27:25
72. AddYears(t, 5) = 2029.12.18 18:27:25
73. SubSeconds(t, 30) = 2024.12.18 18:26:55
74. SubMinutes(t, 30) = 2024.12.18 17:57:25
75. SubHours(t, 2) = 2024.12.18 16:27:25
76. SubDays(t, 10) = 2024.12.08 18:27:25
77. SubBusinessDays(t, 10) = 2024.12.04 18:27:25
78. SubWeeks(t, 4) = 2024.11.20 18:27:25
79. SubMonths(t, 2) = 2024.10.18 18:27:25
80. SubYears(t, 5) = 2019.12.18 18:27:25
81. DifferenceInCalendarDays(t, AddWeeks(t, 9)) = 63
82. DifferenceInBusinessDays(t, AddWeeks(t, 9)) = 45
83. DifferenceInCalendarWeeks(t, AddWeeks(t, 9)) = 9
84. DifferenceInCalendarWeeks(t, AddWeeks(t, 9), true) = 9
85. DifferenceInCalendarMonths(t, AddWeeks(t, 9)) = 2
86. IsSameMinute(t, AddHours(t, 25)) = false
87. IsSameHour(t, AddHours(t, 25)) = false
88. IsSameDay(t, AddHours(t, 25)) = false
89. IsSameWeek(t, AddHours(t, 25)) = true
90. IsSameWeek(t, AddHours(t, 25), true) = true
91. IsSameMonth(t, AddHours(t, 25)) = true
92. IsSameYear(t, AddHours(t, 25)) = true
93. IsCurrentMinute(t) = false
94. IsCurrentHour(t) = false
95. IsCurrentWeek(t) = true
96. IsCurrentWeek(t, true) = true
97. IsCurrentMonth(t) = true
98. IsCurrentYear(t) = true
99. IsToday(t) = true
100. IsTomorrow(t) = false
101. IsYesterday(t) = false
102. IsLeapYear(2100) = false
103. DaysInMonth(2024, 2) = 29
104. GetNthWeekdayInYearMonth(2024, 1, 1, SUNDAY) = 2024.01.07 00:00:00
105. t2s(TimeCurrent()) = Wed, 2024.12.18 17:27
106. SecondsToString(SecsElapsedOfDay(TimeCurrent())) = 17:27:25
107. TimeFormat(TimeCurrent(), YYYY.MM.DD hh:mm) = 2024.12.18 17:27
108. TimeFormat(TimeCurrent(), DDD, YYYY.MM.DD hh:mm:ss) = Wed, 2024.12.18 17:27:25
109. TimeFormat(TimeCurrent(), D MMM YYYY, HH:mm a) = 18 Dec 2024, 05:27 pm
*/