Effacer les filtres
Effacer les filtres

Increment dates using for loop

8 vues (au cours des 30 derniers jours)
CM
CM le 9 Fév 2019
I'm trying to fill a variable sized datetime array. I then want the declared datetime value to fill the first 3 elements before incrementing by one to fill the next three.This process repeats until the desired sized element is reach. See current output & desired output.
Code:
samples = input("Number of Samples to Generate: ");
DateBuilt = repmat(datetime(0,0,0),samples,1);
t = datetime(2018,1,1);
DateBuilt(1) = t
for i=1:samples
if i <= 3
DateBuilt(i) = t;
else
t = t + 1;
DateBuilt(i) = t;
end
Current Output:
Number of Samples to Generate: 14
DateBuilt =
14×1 datetime array
01-Jan-2018
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
30-Nov--0001
Desired Output:
Number of Samples to Generate: 14
DateBuilt =
14×1 datetime array
01-Jan-2018
01-Jan-2018
01-Jan-2018
02-Jan-2018
02-Jan-2018
02-Jan-2018
03-Jan-2018
03-Jan-2018
03-Jan-2018
04-Jan-2018
04-Jan-2018
04-Jan-2018
05-Jan-2018
05-Jan-2018
  5 commentaires
madhan ravi
madhan ravi le 9 Fév 2019
Modifié(e) : madhan ravi le 9 Fév 2019
Why in your desired output the last date has only repeated twice , any reason for it?
CM
CM le 9 Fév 2019
Yes. The user input (*see “samples“ variable in code) determines the number of elements in the datetime array. The first element of array is filled with a datetime. The loop then continues to fill the 2nd and 3rd elements before incrementing by 1 day. the loop then proceeds to fill the 4th, 5th, and 6th elements before incrementing again and repeating the process for the next three elements This continues until the user defined size is reached. Repeating the last date only twice is my attempt to show that the loop stops based on an arbitrary number entered by the user.

Connectez-vous pour commenter.

Réponse acceptée

Eric Sofen
Eric Sofen le 9 Fév 2019
Are there any other calculations being done in the loop body of your actual code? If not, this can be done without looping:
samples = input("Number of Samples to Generate: ");
days = floor((0:samples-1)./3)'+1;
dt = datetime(2018,1,days);
If you do really need to loop for some other reason, there are things that need to change in your code:
1) It's missing and end to the conditional block.
2) t = t+1 ends up incrementing the day every iteration.
samples = input("Number of Samples to Generate: ");
DateBuilt = repmat(datetime(0,0,0),samples,1);
t = datetime(2018,1,1);
DateBuilt(1) = t;
for i=1:samples
DateBuilt(i) = t+days(floor((i-1)/3));
end

Plus de réponses (1)

Stephen23
Stephen23 le 9 Fév 2019
>> D = datetime('01-Jan-2018');
>> N = 14;
>> G = 3;
>> V = D + caldays(0:ceil(N/G)-1).';
>> V = repelem(V,G);
>> V = V(1:N)
V =
01-Jan-2018
01-Jan-2018
01-Jan-2018
02-Jan-2018
02-Jan-2018
02-Jan-2018
03-Jan-2018
03-Jan-2018
03-Jan-2018
04-Jan-2018
04-Jan-2018
04-Jan-2018
05-Jan-2018
05-Jan-2018

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by