Hier ein paar Methoden um Zeitstempel/Datumsstempel in Arma 3 zu verwenden.
Die Code in fn_timeUnix.sqf berechnet keinen Unix TimeStamp da die Zahlen ansonsten zu Groß werden und Arma bei der Umrechnung Probleme bekommt/ungenau wird.
Aus diesem Grund kann man entweder einen eigenen Epoch verwenden oder den standart Epoch 2015 verwenden.
Viel Spaß damit
Code: fn_timeUnix.sqf
/*
File: fn_timeUnix.sqf
Date: 2017-08-24 22:33:24
Author: Patrick "Lucian" Schmidt
Disclaimer: No one is allowed to use and edit my Script except for the DE100-ALTIS.life server and me.
Description:
Calcs seconds since 1 Feb. 00:00 _startYear(def. 2015)
Note:
Timerange getting longer mins are getting unpercise
*/
params[
["_input", 0, [0,[]]],
["_startYear",2015]
];
if (_input isEqualType []) exitWith {
private _d = 0;
for "_i" from _startYear to (_input select 0) - 1 do
{
_d = _d + round linearConversion [0, 1, dateToNumber [_i, 12, 31, 23, 59], 0, 365, false];
};
_d = _d + floor(linearConversion [0, 1, dateToNumber (_input select[0,5]), 0, 365, false]);
_d *60*60*24+((_input select 3))*60*60+(_input select 4)*60;
};
private _y = _startYear;
private _m = 1;
private _d = 0;
private _h = 0;
private _mi = 0;
private _ticks = _input;
for "_i" from 0 to 1 step 0 do {
private _yD = if (_y call BIS_fnc_isLeapYear) then {
366;
} else {
365;
};
_ticks = _ticks - _yD*24*60*60;
if (_ticks < 0) exitWith {
_d = (_yD*24*60*60 - abs(_ticks))/60/60/24;
};
_y = _y + 1;
};
private _months = [
["Jan",31],
["Feb",if (_y call BIS_fnc_isLeapYear) then {29;} else {28;}],
["Mrz",31],
["April",30],
["Mai",31],
["Juni",30],
["Juli",31],
["August",31],
["September",30],
["Oktober",31],
["November",30],
["Dezember",31]
];
_ticks = _d;
{
_ticks = _ticks - (_x select 1);
if (_ticks < 0) exitWith {
_m = _forEachIndex + 1;
_d = (_x select 1)-abs _ticks+1;
_h = (_d - floor _d)*24;
_mi = (_h - (floor _h))*60;
};
} forEach _months;
[_y,_m,floor _d,floor _h,round _mi,0];
Alles anzeigen
Code: fn_timeToStr.sqf
/*
File: fn_timeToStr.sqf
Date: 2016-10-30 20:48:50
Author: Patrick "Lucian" Schmidt
Disclaimer: No one is allowed to use and edit my Script except for the DE100-ALTIS.life server and me.
Description:
Transforms time var into a nice looking string.
Returns time and date in two seperate strings
_mode
0 - str
1 - db
2 - array
*/
params[
["_mode", 0],
["_date",life_real_time]
];
private _addZero = {
params[
["_number", 0, [0]]
];
if (_number < 10) exitWith {
format ["0%1",_number];
};
_number;
};
private _year = _date select 0;
private _month = [_date select 1] call _addZero;
private _day = [_date select 2] call _addZero;
private _hr = [_date select 3] call _addZero;
private _min = [_date select 4] call _addZero;
private _return = call {
if (_mode == 0) exitWith {
format["%1.%2.%3 %4:%5",_day,_month,_year,_hr,_min];
};
if (_mode == 1) exitWith {
format["%1-%2-%3 %4:%5:00",_year,_month,_day,_hr,_min];
};
if (_mode == 2) exitWith {
[format["%1:%2", _hr, _min],format["%1.%2.%3", _day, _month, _year]];
};
};
_return;
Alles anzeigen
Code: fn_timeDiff.sqf
/*
File: fn_timeDiff.sqf
Date: 2017-08-13 01:47:09
Author: Patrick "Lucian" Schmidt
Disclaimer: No one is allowed to use and edit my Script except for the DE100-ALTIS.life server and me.
Description:
Take a look for yourself.
*/
params[
["_date1", [], [[]]],
["_date2", [], [[]]]
];
private _raw = ([_date1] call life_fnc_timeUnix) - ([_date2] call life_fnc_timeUnix);
private _left = abs _raw;
private _week = floor(_left/(60*60*24*7));
_left = _left - _week*60*60*24*7;
private _day = floor(_left/(60*60*24));
_left = _left - _day*60*60*24;
private _hr = floor(_left/(60*60));
_left = _left - _hr*60*60;
private _min = floor(_left/(60));
_left = _left - _min*60;
private _sec = _left;
private _ret = call {
if (_week > 0) exitWith {
if (_week > 1) then {
format["%1 Wochen",_week];
} else {
format["%1 Woche",_week];
};
};
if (_day > 0) exitWith {
if (_day > 1) then {
format["%1 Tage",_day];
} else {
format["%1 Tag",_day];
};
};
if (_hr > 0) exitWith {
if (_hr > 1) then {
format["%1 Stunden",_hr];
} else {
format["%1 Stunde",_hr];
};
};
if (_min > 0) exitWith {
if (_min > 1) then {
format["%1 Minuten",_min];
} else {
format["%1 Minute",_min];
};
};
if (_sec > 0) exitWith {
if (_sec > 1) then {
format["%1 Sekunden",_sec];
} else {
format["%1 Sekunde",_sec];
};
};
};
[_raw <= 0,_ret,_raw];
Alles anzeigen
Code: fn_timeAdd.sqf
/*
File: fn_timeAdd.sqf
Date: 2017-08-24 19:45:22
Author: Patrick "Lucian" Schmidt
Disclaimer: No one is allowed to use and edit my Script except for the DE100-ALTIS.life server and me.
Description:
Take a look for yourself.
*/
params[
["_time", [], [[]]],
["_add", 0, [0]],
["_array",false]
];
private _unix = [_time] call life_fnc_timeUnix;
private _newTime = [_unix+_add] call life_fnc_timeUnix;
if (_array) exitWith {
_newTime;
};
[0,_newTime] call life_fnc_timeToStr;
Alles anzeigen