define time period for each year

2 views (last 30 days)
Hi all,
I wish to re-define my time period.
The initial time period is as following:
The time period ranges from 01-10 (1st of Oct.) till 30-04 (30th of Apr.).
The range is defined by months only. The array 'Date' contains datetime value that is in yyyy-MM-dd format.
% starting month
sm = 5;
% ending month
em = 9;
% starting day
fd = 1;
% ending day
ld = 30;
PERIOD_1 = find(month(Date)<sm) | month(Date)>em)
PERIOD_2 = find(month(Date)>(sm-1) & month(Date)<(em+1))
As for a new time period, I wish to use both day values ('starting day' and 'ending day') as well, because if not...
i won't be able to define period that does not start on the 1st of a month (e.g. 04-10 till 27-04).
Thank you!

Accepted Answer

Walter Roberson
Walter Roberson on 15 Nov 2020
[y, m, d] = ymd(YourDataTable.Date);
mask = m >= sm & m <= em & (m > sm | d >= fd) & (m < em | d <= ld);
selected_entries = YourDataTable(mask,:);
  2 Comments
Peter Perkins
Peter Perkins on 19 Nov 2020
I was gonna say that it should also be possible to simplify this logical test by using 'dayofyear'. That makes it just
d = day(YourDataTable.Date,'dayofyear');
mask = d < 120 | d >= 274
but then ... stupid leap years! Still, you could modify that a bit to work.
Walter Roberson
Walter Roberson on 19 Nov 2020
Though the poster did say that the range was defined by month only, so
m = month(YourDataTable.Date);
mask = m <= 4 | m >= 10;
selected_entries = YourDataTable(mask,:);
I think my earlier code was selecting in the opposite sense, as I did not notice that they wanted October to April.

Sign in to comment.

More Answers (0)

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!