2017-09-07 106 views
5

Biz ayın ilk iş günü almak için fbusdate kullanabilir?MATLAB'de bir haftanın ilk iş tarihi nasıl bulunur?</p> <pre><code>Date = fbusdate(Year, Month); </code></pre> <p>Ancak, nasıl bir <em>hafta</em> ilk iş gününde alırım:

Örnek olarak

, bu post ediyorum haftasında Pazartesi 2017/09/07 ABD'de bir tatil oldu: Ben belirlemek nasıl

isbusday(736942) % = 0 

bu haftalık ilk iş günü Ertesi gün 736943?

+0

Pazartesi, her zaman bir haftanın ilk iş günüdür. – m7913d

+1

Hatalı. Bazen bir tatil (örneğin devletlerde). Bu hafta iyi bir örnek 09/04/2017 bir iş tatiliydi. – JohnAndrews

+0

İkinci haftayı istiyorsan, ilk haftayı al ve sonra 7 ekle? –

cevap

1

bunu çözüldü.

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

Bir haftanın ilk çalışma günü döndüren bir yerleşik fonksiyonun farkında değilim, ama Pazar sonra the next working day isteyerek edinebilirsiniz:

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

İyi fikir. Cevap olarak bir işlev yazdınız. – JohnAndrews

4

Sizin arzu fbusdateweek fonksiyonu tek satırda yapılabilir yanında olmak için daha sonra haftanın ilk Pazar günü almak için busdate sadece işlevini weekday kullanarak: Burada @ m7913d cevabını dayanan bir fonksiyondur Bundan sonra iş günü:

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


Not:busdate t için tüm tatil ve özel ticari olmayan günleri almak için varsayılan olarak işlev holidays kullanır o New York Borsası. Gerekirse, aşağıdaki şekilde kullanmak busdate için an alternate set of holidays tanımlayabilirsiniz:

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

Bu şekilde lokalize tatil kümesi tanımlayabilirsiniz.

+0

Serin! Ben de daha hızlı mı acaba? Tarih saatine dönüşümü hatırladığım bir süre alabilir. – JohnAndrews

+0

@JohnAndrews: Boşver. Bir tarih bile gerekli değildi. * Waaay * daha basitti. :) – gnovice

+0

... Genius haha ​​:) – JohnAndrews