Create a monthly date vector of serial numbers
Ältere Kommentare anzeigen
Hi everyone,
I spent hours trying this and I am sure it must be easy but I can't get my head around it. What I want is to create a vector that contains serial numbers for each month for 30 years, so that I can use this vector for the x axis of a plot. (so e.g. I want Jan 1990, Feb 1990, March 1990 etc in serial numbers)
why doesn't something simple like this work? datenum({'01-Jan-1900':'01-Nov-2011'})
Any help is appreciated Thanks so much Sandra
Akzeptierte Antwort
Weitere Antworten (4)
Walter Roberson
am 13 Jan. 2012
[Y,M] = meshgrid(1900:1929, 1:12);
TheSerialDates = datenum([Y(:), M(:), ones(numel(Y),1)]);
3 Kommentare
Fangjun Jiang
am 13 Jan. 2012
The order is not right. diff(TheSerialDates ) will show it.
Walter Roberson
am 13 Jan. 2012
Thanks for catching that. I have fixed it now. I think that's the first time I ever found a use for meshgrid() !
Suene
am 23 Jul. 2015
This solution also worked for me. Many thanks!
Fangjun Jiang
am 13 Jan. 2012
x=bsxfun(@(Month,Year) datenum(Year,Month,1),(1:12).',1980:2010);
x=x(:);
diff(x)
1 Kommentar
Suene
am 23 Jul. 2015
thanks for sharing! It worked for me! :)
Steven Lord
am 31 Aug. 2018
With datetime and calendarDuration there are a couple different ways to create this vector.
The first technique just adds calendar months to the starting date.
startDate = datetime('January 1, 1990');
V1 = startDate + calmonths(0:30*12-1); % 30 years = 30*12 calendar months
The second technique adds between 0 and 11 calendar months and between 0 and 29 calendar years to the starting date. This uses implicit expansion to add the months and years together to form a matrix. I reshape that matrix when I compute V2 to make it the same size and orientation as V1. If you wanted something more like a planner view, look at V2planner.
startDate = datetime('January 1, 1990');
oneYearInMonths = calmonths(0:11);
thirtyYearsInYears = calyears(0:29);
monthsPlusYears = oneYearInMonths.' + thirtyYearsInYears;
V2 = startDate + reshape(monthsPlusYears, 1, []);
V2planner = startDate + monthsPlusYears;
This next one takes advantage of the fact that the datetime function is not limited to accepting only month numbers between 1 and 12. The 13th month of 1990 is actually January 1991.
monthlist = 1:30*12;
V3 = datetime(1990, monthlist, 1);
Do these give the same result?
isequal(V1, V2)
isequal(V2, V3)
isequal(V1, V3)
Navid Ghajarnia
am 31 Aug. 2018
This is another answer to this question:
t1 = datetime(1900,01,01);
t2 = datetime(2011,11,01);
t(:,1) = t1:t2;
Dates_Daily = [year(t), month(t)];
Dates_Monthly = unique(Dates_Daily,'rows');
Kategorien
Mehr zu Time Series Objects finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!