2017-09-07 147 views
5

Chúng ta có thể sử dụng fbusdate để có được những ngày làm việc đầu tiên của một tháng:Làm cách nào để tìm ngày làm việc đầu tiên của một tuần trong MATLAB?

Date = fbusdate(Year, Month); 

Tuy nhiên, làm thế nào để chúng ta có ngày làm việc đầu tiên của một tuần?

Như một ví dụ, trong tuần lễ mà tôi gửi bài này, Thứ Hai 2017/09/07 là một kỳ nghỉ ở Mỹ:

isbusday(736942) % = 0 

Làm thế nào để xác định rằng vào ngày làm việc đầu tiên của tuần này sẽ là ngày tiếp theo 736943?

+0

Thứ hai luôn là ngày làm việc đầu tiên trong tuần – m7913d

+1

Không chính xác. Đôi khi nó là một kỳ nghỉ (ví dụ như ở các tiểu bang). Tuần này, ví dụ điển hình 09/04/2017 là một kỳ nghỉ kinh doanh. – JohnAndrews

+0

Nếu bạn muốn tuần thứ hai, có được tuần đầu tiên và sau đó thêm 7? –

Trả lời

1

Giải quyết nó. Đây là một chức năng mà được dựa trên câu trả lời của @ m7913d:

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

Tôi không biết của một hàm dựng sẵn mà trở lại vào ngày làm việc đầu tiên của một tuần, nhưng bạn có thể có được nó bằng cách yêu cầu the next working day sau Chủ nhật:

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

Ý tưởng hay. Đã viết một hàm làm câu trả lời. – JohnAndrews

4

mong muốn fbusdateweek Chức năng của bạn có thể được thực hiện trong một dòng chỉ sử dụng chức năng weekday để có được ngày chủ nhật đầu tiên của tuần sau đó busdate để có được những tiếp theo ngày làm việc sau đó:

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


Lưu ý:busdate sử dụng hàm holidays theo mặc định để có được tất cả các ngày lễ và ngày nontrading đặc biệt cho t Sở giao dịch chứng khoán New York. Nếu cần thiết, bạn có thể xác định an alternate set of holidays cho busdate sử dụng như sau:

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

Bằng cách này bạn có thể định nghĩa một tập hợp các ngày lễ địa phương.

+0

Tuyệt! Tôi có tự hỏi không? Chuyển đổi sang datetime có thể mất một thời gian tôi nhớ. – JohnAndrews

+0

@JohnAndrews: Đừng bận tâm. Một datetime thậm chí không cần thiết. Đó là * waaay * đơn giản hơn. :) – gnovice

+0

... Genius haha ​​:) – JohnAndrews

Các vấn đề liên quan