From d936d479cf93ae896297b69ed30a589077a85ebf Mon Sep 17 00:00:00 2001 From: jonpas Date: Wed, 16 Feb 2022 13:13:54 +0100 Subject: [PATCH 1/2] Add CBA_fnc_getWeekDay --- addons/common/CfgFunctions.hpp | 4 ++++ addons/common/fnc_getWeekDay.sqf | 36 ++++++++++++++++++++++++++++++++ addons/common/test.sqf | 2 +- addons/common/test_common.sqf | 33 +++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 addons/common/fnc_getWeekDay.sqf create mode 100644 addons/common/test_common.sqf diff --git a/addons/common/CfgFunctions.hpp b/addons/common/CfgFunctions.hpp index 794c768178..c7dd2ac2bc 100644 --- a/addons/common/CfgFunctions.hpp +++ b/addons/common/CfgFunctions.hpp @@ -114,6 +114,10 @@ class CfgFunctions { PATHTO_FNC(getNearestBuilding); }; + class DateTime { + PATHTO_FNC(getWeekDay); + }; + class Misc { PATHTO_FNC(addPerFrameHandler); PATHTO_FNC(removePerFrameHandler); diff --git a/addons/common/fnc_getWeekDay.sqf b/addons/common/fnc_getWeekDay.sqf new file mode 100644 index 0000000000..4706a2cd53 --- /dev/null +++ b/addons/common/fnc_getWeekDay.sqf @@ -0,0 +1,36 @@ +#include "script_component.hpp" +/* ---------------------------------------------------------------------------- +Function: CBA_fnc_getWeekDay + +Description: + Calculates date's day of the week using a modified Rata Die method with fractional years. + +Parameters: + _date - Date of [year, month, day]. + +Returns: + Day of the week (0: Sunday, 6: Saturday, -1: invalid) + +Examples: + (begin example) + [systemTimeUTC] call CBA_fnc_getWeekDay; + [date] call CBA_fnc_getWeekDay; + [[2022, 2, 16]] call CBA_fnc_getWeekDay; + (end) + +Author: + Jonpas +---------------------------------------------------------------------------- */ + +params [["_date", [0, 0, 0], [[]], [3, 4, 5, 6, 7]]]; + +// Keep only year, month, day if longer date format is given +// Hours and minutes must be given as 0 for dateToNumber to work correctly for this use-case +_date = [_date select 0, _date select 1, _date select 2, 0, 0]; + +private _yearBefore = ((_date select 0) - 1) max 0; +private _leapYears = floor (_yearBefore / 4); +private _normalYears = _yearBefore - _leapYears; +private _days = _normalYears + (_leapYears * (366 / 365)) + dateToNumber _date; + +(round (_days / (1 / 365))) mod 7 // return diff --git a/addons/common/test.sqf b/addons/common/test.sqf index 63e8537e33..b3dea79de4 100644 --- a/addons/common/test.sqf +++ b/addons/common/test.sqf @@ -5,7 +5,7 @@ #define DEBUG_MODE_FULL #include "script_component.hpp" -#define TESTS ["config", "inventory", "weaponComponents", "position", "ret", "macro_is_x"] +#define TESTS ["common", "config", "inventory", "weaponComponents", "position", "ret", "macro_is_x"] SCRIPT(test-common); diff --git a/addons/common/test_common.sqf b/addons/common/test_common.sqf new file mode 100644 index 0000000000..5a6eb7fc25 --- /dev/null +++ b/addons/common/test_common.sqf @@ -0,0 +1,33 @@ +#include "script_component.hpp" +SCRIPT(test_common); + +// execVM "\x\cba\addons\common\test_common.sqf"; + +private ["_funcName", "_result"]; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +_funcName = "CBA_fnc_getWeekDay"; +LOG("Testing " + _funcName); + +TEST_DEFINED("CBA_fnc_getWeekDay",""); + +_result = [] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == -1,_funcName); // invalid + +_result = [[0, 0, 0]] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == -1,_funcName); // invalid + +_result = [[2022, 1, 1]] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == 6,_funcName); // Saturday + +_result = [[2022, 2, 16]] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == 3,_funcName); // Wednesday + +// date format [year, month, day, hour, minute] +_result = [[2022, 2, 17, 11, 56]] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == 4,_funcName); // Thursday + +// systemTime format [year, month, day, hour, minute, second, millisecond] +_result = [[2022, 2, 18, 11, 56, 24, 126]] call CBA_fnc_getWeekDay; +TEST_TRUE(_result == 5,_funcName); // Friday From 4a45fb38d6dc4f9daf5a67bd6436fcaba49015d7 Mon Sep 17 00:00:00 2001 From: jonpas Date: Wed, 16 Feb 2022 20:53:38 +0100 Subject: [PATCH 2/2] Rename getWeekDay to weekDay --- addons/common/CfgFunctions.hpp | 2 +- .../{fnc_getWeekDay.sqf => fnc_weekDay.sqf} | 8 ++++---- addons/common/test_common.sqf | 16 ++++++++-------- 3 files changed, 13 insertions(+), 13 deletions(-) rename addons/common/{fnc_getWeekDay.sqf => fnc_weekDay.sqf} (86%) diff --git a/addons/common/CfgFunctions.hpp b/addons/common/CfgFunctions.hpp index c7dd2ac2bc..118b7ed605 100644 --- a/addons/common/CfgFunctions.hpp +++ b/addons/common/CfgFunctions.hpp @@ -115,7 +115,7 @@ class CfgFunctions { }; class DateTime { - PATHTO_FNC(getWeekDay); + PATHTO_FNC(weekDay); }; class Misc { diff --git a/addons/common/fnc_getWeekDay.sqf b/addons/common/fnc_weekDay.sqf similarity index 86% rename from addons/common/fnc_getWeekDay.sqf rename to addons/common/fnc_weekDay.sqf index 4706a2cd53..5f7552838c 100644 --- a/addons/common/fnc_getWeekDay.sqf +++ b/addons/common/fnc_weekDay.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* ---------------------------------------------------------------------------- -Function: CBA_fnc_getWeekDay +Function: CBA_fnc_weekDay Description: Calculates date's day of the week using a modified Rata Die method with fractional years. @@ -13,9 +13,9 @@ Returns: Examples: (begin example) - [systemTimeUTC] call CBA_fnc_getWeekDay; - [date] call CBA_fnc_getWeekDay; - [[2022, 2, 16]] call CBA_fnc_getWeekDay; + [systemTimeUTC] call CBA_fnc_weekDay; + [date] call CBA_fnc_weekDay; + [[2022, 2, 16]] call CBA_fnc_weekDay; (end) Author: diff --git a/addons/common/test_common.sqf b/addons/common/test_common.sqf index 5a6eb7fc25..8f5235a746 100644 --- a/addons/common/test_common.sqf +++ b/addons/common/test_common.sqf @@ -7,27 +7,27 @@ private ["_funcName", "_result"]; //////////////////////////////////////////////////////////////////////////////////////////////////// -_funcName = "CBA_fnc_getWeekDay"; +_funcName = "CBA_fnc_weekDay"; LOG("Testing " + _funcName); -TEST_DEFINED("CBA_fnc_getWeekDay",""); +TEST_DEFINED("CBA_fnc_weekDay",""); -_result = [] call CBA_fnc_getWeekDay; +_result = [] call CBA_fnc_weekDay; TEST_TRUE(_result == -1,_funcName); // invalid -_result = [[0, 0, 0]] call CBA_fnc_getWeekDay; +_result = [[0, 0, 0]] call CBA_fnc_weekDay; TEST_TRUE(_result == -1,_funcName); // invalid -_result = [[2022, 1, 1]] call CBA_fnc_getWeekDay; +_result = [[2022, 1, 1]] call CBA_fnc_weekDay; TEST_TRUE(_result == 6,_funcName); // Saturday -_result = [[2022, 2, 16]] call CBA_fnc_getWeekDay; +_result = [[2022, 2, 16]] call CBA_fnc_weekDay; TEST_TRUE(_result == 3,_funcName); // Wednesday // date format [year, month, day, hour, minute] -_result = [[2022, 2, 17, 11, 56]] call CBA_fnc_getWeekDay; +_result = [[2022, 2, 17, 11, 56]] call CBA_fnc_weekDay; TEST_TRUE(_result == 4,_funcName); // Thursday // systemTime format [year, month, day, hour, minute, second, millisecond] -_result = [[2022, 2, 18, 11, 56, 24, 126]] call CBA_fnc_getWeekDay; +_result = [[2022, 2, 18, 11, 56, 24, 126]] call CBA_fnc_weekDay; TEST_TRUE(_result == 5,_funcName); // Friday