2017-09-07 44 views
5

我們可以使用fbusdate獲得個月的第一個工作日:如何在MATLAB中查找一週的第一個商業日期?

Date = fbusdate(Year, Month); 

然而,我們怎麼一個周的第一個工作日?

舉例來說,在那段我張貼這一週,週一2017年9月7日是美國假日:

isbusday(736942) % = 0 

如何確定的第一個工作日本週將是第二天736943

+0

週一始終是一個星期 – m7913d

+1

不正確的第一個工作日。有時候這是一個假期(例如在州內)。本週的好例子09/04/2017是商務假期。 – JohnAndrews

+0

如果你想要第二週,獲得第一週,然後添加7? –

回答

1

解決它。這是基於對@ m7913d的答案的函數:僅使用功能weekday得到一週的第一個星期日,然後busdate獲得下一個

function Busday = fbusdateweek(date) 
% Return the first business day after Sunday 
% 'date' is a datenum input 

dperiod = date-6:date; 
sundays = weekday(dperiod)==1; 

sunday = find(sundays==1,1,'first'); 
datesunday = dperiod(sunday); 

% --> 
Busday = busdate(datesunday); 

end 
4

我不知道返回一週的第一個工作日,一個內建的功能,但你可以在週日之後請求the next working day獲得它:

busdate(736941); % 736941 = Sunday 09/03/2017 
+0

好主意。已經寫了一個函數作爲答案。 – JohnAndrews

4

你所需fbusdateweek功能,可以在同一行中完成之後的工作日:

dn = 736942; % Date number for any day in a week 
Date = busdate(dn-weekday(dn)+1); 


注:busdate默認使用功能holidays獲得對於T所有的節假日和特殊nontrading天他在紐約證券交易所。如果必要的話,你可以定義爲an alternate set of holidaysbusdate使用如下:

holidayArray = ...; % Some set of date numbers, vectors, or datetimes 
Date = busdate(dn-weekday(dn)+1, 1, holidayArray); 

這樣你可以定義一組本地化的假期。

+0

酷!我想知道它也更快嗎?轉換爲日期時間可能需要一些時間,我記得。 – JohnAndrews

+0

@JohnAndrews:沒關係。日期時間甚至不需要。這是* waaay *更簡單。 :) – gnovice

+0

......天才哈哈:) – JohnAndrews

相關問題