MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by cfjunior on 27 Apr 2013

How do I create a column vector with the first day of each month? Considering I have a list of days...

*No products are associated with this question.*

Answer by John Doe on 27 Apr 2013

Edited by John Doe on 27 Apr 2013

Accepted answer

Not quite sure what you are asking for here.

I assume you have a vector with all days from Monday-Sunday, and you know which day the first day of the year is:

weekdays = [{'Monday'},{'Tuesday'},{'Wednesday'},{'Thursday'},{'Friday'},{'Saturday'},{'Sunday'}];

dayNumber = zeros(1,12); dayNumber(1) = 2; % 2013 started on a Tuesday. numDays = [31 28 31 30 31 30 31 31 30 31 30 31]; % Not a leap year

for i = 1:11 dayNumber(i+1) = mod((dayNumber(i)+days(i)-1),7)+1; end

for i = 1:12 dayName(i) = weekdays(dayNumber(i)); end

If you need to account for leap years: It is a leap year every fourth year, except years that can be divided by 100, except years that can be divided by 400.

A general approach would be something like this:

year = 2013;

year0 = 1900; startDay = 1; % Year 1900 started on a monday.

if year > year0 for i = 1:(year-year0) if mod((year0+i),4)~=0 startDay = startDay + 365; elseif mod((year0+i),4)==0 && mod((year0+i),100)~=0 startDay = startDay + 366; elseif mod((year0+i),4)==0 && mod((year0+i),100)==0 && mod((year0+i),400)~=0 startDay = startDay + 365; elseif mod((year0+i),4)==1 && mod((year0+i),400)==0 startDay = startDay + 366; end end end dayNumber = mod(startDay,7)+1;

This gives dayNumber = 2, for year = 2013. Then continue with the code above. (numDays(2)=29, if leap year)

Answer by Jan Simon on 27 Apr 2013

indata = datenum('10/01/1998'):datenum('06/31/1999'); dvec = datevec(data); duniq = unique(dvec(:, 1:2), 'rows'); result = datenum(v(:,1), v(:,2), 1);

Now result contains a row vector of the serial date numbers of the first day of each month contained in the input data.

## 3 Comments

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/73749#comment_145824

Please explain what "I have a list of dates" exactly means. Guessing the type and size of the inputs would be an inefficient approach.

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/73749#comment_145844

a list of days would be a column vector that goes from 10/01/1998 till 06/31/1999 in numbers

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/73749#comment_145871

And example in valid Matlab syntax would be more helpful. The input is still not clear. Something like this would be much easier to understand: