-
Notifications
You must be signed in to change notification settings - Fork 0
/
findTimeSlice.m
92 lines (83 loc) · 3.36 KB
/
findTimeSlice.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function time_slice = findTimeSlice(year, month, day)
% Find the day of the week. We're only interested in DayName
dayWeekNumber = weekday(strcat(year,'-',month,'-',day));
% Determine the last day of the month in case we need to roll over to
% the next month to select the proper eddy body files
yearNum = str2double(year);
monthNum = str2double(month);
lastDay = eomday(yearNum, monthNum);
if(str2double(day) > lastDay)
disp('Error: the value of `day` entered is invalid')
return;
end
% Determine the nearest Wednesday
% Some additional if-statements in here to make sure that month/day
% values < 10 being with a 0
if(dayWeekNumber ~= 4)
dayMonthNum = str2double(day);
if (dayWeekNumber <= 3) % day is a Sun/Mon/Tue
while (dayWeekNumber ~= 4)
if(dayMonthNum == lastDay) % Change month case
if(monthNum == 12) % + change year case
yearNum = yearNum + 1;
monthNum = 1;
dayMonthNum = 1;
year = num2str(yearNum);
month = '01';
else % increment month, reset day
monthNum = monthNum + 1;
dayMonthNum = 1;
if(monthNum < 10)
month = strcat('0',num2str(monthNum));
else
month = num2str(monthNum);
end
end
else % increment day
dayMonthNum = dayMonthNum + 1;
end
if(dayMonthNum < 10)
day = strcat('0',num2str(dayMonthNum));
else
day = num2str(dayMonthNum);
end
dayWeekNumber = weekday(strcat(year,'-',month,'-',day));
end
else %day is a Thu/Fri/Sat
while (dayWeekNumber ~= 4)
if(dayMonthNum == 1) % Change month case
if(monthNum == 1) % Change year/month case, set day
yearNum = yearNum -1;
monthNum = 12;
dayMonthNum = eomday(yearNum, monthNum);
year = num2str(yearNum);
month = num2str(monthNum);
else % decrement month, set day
monthNum = monthNum - 1;
dayMonthNum = eomday(yearNum, monthNum);
if(monthNum < 10)
month = strcat('0',num2str(monthNum));
else
month = num2str(monthNum);
end
end
else % decrement day
dayMonthNum = dayMonthNum - 1;
end
if(dayMonthNum < 10)
day = strcat('0',num2str(dayMonthNum));
else
day = num2str(dayMonthNum);
end
dayWeekNumber = weekday(strcat(year,'-',month,'-',day));
end
end
end
if(length(day) < 2)
day = strcat('0',day);
end
if(length(month) < 2)
month = strcat('0',month);
end
time_slice = strcat(year,'-',month,'-',day);
end