Files
Earthquake/day_array.m

116 lines
2.6 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function dates=day_array(dd,mm,yyyy,prev,next)
%% By L_DelOff
% функция формирует массив, состоящий из дат, по которым тербуется провести
% анализ
% Вход: день x, месяц x, год x, скольно тербуется дней до, скольно тербуется дней
% после дня x
% Выход: структура
% номер день месяц год
% 1 dd mm yyyy
% 2 dd mm yyyy
% ...
%% Для отладки (потом закомментировать)
% dd=15;
% mm=12;
% yyyy=2019;
% prev=400;
% next=400;
%% Начало
dates=[];
count=0;
for i=-prev:next
count=count+1;
dates(count).N=count;
dates(count).N2=i;
[d, m, y]=offset_date(dd,mm,yyyy,i);
dates(count).day=d;
dates(count).month=m;
dates(count).year=y;
end
end
function [d, m, y]=offset_date(dd,mm,yyyy,N)
%% By L_DelOff
% учет перехода через месяц при переходе с dd.mm.yyyy на N дней
% 1. январь 31
% 2. февраль 28(29)
% 3. март 31
% 4. апрель 30
% 5. май 31
% 6. июнь 30
% 7. июль 31
% 8. август 31
% 9. сентябрь 30
% 10. октябрь 31
% 11. ноябрь 30
% 12. декабрь 31
%% Начало
d=dd+N;
m=mm;
y=yyyy;
while d<=0 % на месяц назад
m=m-1; % отнимаем месяц
while m<=0
y=y-1;
m=m+12;
end
if sum(m==[1 3 5 7 8 10 12])==1 % если предыдущий месяц имеет 31 день
d=d+31;
else
if (m==2)
d=d+28;
if mod(y,4)==0
d=d+1;
end
else
d=d+30;
end
end
end
% определить конец текущего месяца
if sum(m==[1 3 5 7 8 10 12])==1
endday=31;
else
if (m==2)
endday=28;
if mod(y,4)==0
endday=29;
end
else
endday=30;
end
end
while d>endday
if sum(m==[1 3 5 7 8 10 12])==1
d=d-31;
else
if (m==2)
d=d-28;
if mod(y,4)==0
d=d-1;
end
else
d=d-30;
end
end
m=m+1; % прибавляем месяц
while m>12
y=y+1;
m=m-12;
end
if sum(m==[1 3 5 7 8 10 12])==1
endday=31;
else
if (m==2)
endday=28;
if mod(y,4)==0
endday=29;
end
else
endday=30;
end
end
end
end