2016-08-20 17 views
1

私は毎月MS Excelのスプレッドシートを生成するAppleScriptを書いています。今月中に何日いるかを知る必要があります。その後、すべての月に渡って、特定の日が平日か休日かを決定します。AppleScriptの月の最終日と今月の休日を取得する

私はこのために休暇を保存することを考えています(このウェブからはhttp://kalendar365.cz/statni-svatky/2016をテーブルとしてアクセスし、ローカルにアクセスする)。

私の質問は:

  1. は、どのように私は月の最後の日を得るのですか?
  2. 今月中にすべての日数を効率的にループし、日曜日、土曜日、または他の場所で指定された日(xlsxスプレッドシートのテキストファイルなど)であるかどうかを判断するにはどうすればよいですか?
+0

バニラAppleScriptでは、現在の月の最後の日をこの方法で取得できます。1)変数を「現在の日付」に設定します。2)その日付の「day」プロパティを32に設定して、オーバーフローを強制します。これにより、次の月の最初の日に日付が設定されます。 3)1日を引く。 – vadian

+0

それを計算するのを簡単にすることはできませんか? [NETWORKDAYS'](https://support.office.com/en-us/article/NETWORKDAYS-function-48e717bf-a7a3-495f-969e-5005e3eb18e7)の中にビルドされていますステップ... –

+0

@vadian:これは動作しません(少なくともOS 10.8以降):次の3つのステートメントをScript Editorに貼り付けて実行すると、結果の日付は3月1日ではなく3月_3rdです(あなたのロケールに合わせて日付文字列を微調整する必要があります): 'set aDate to date" 2016年2月1日 "' 'aDateを32日に設定する '、' aDate'。 – mklement0

答えて

0

pbell's answerは有望であるが、GetLastDay機能は、31よりも少ないを持っているか月間正しく動作しません。日々;アプローチは、月の1日に日付を設定し、その後(おそらく来年に寝返り)月をインクリメントし、1日を減算することに基づいている

# Returns the number of days in the month that the given date falls in. 
# Example: 
#  my GetNumberOfDaysInMonth(current date) 
on GetNumberOfDaysInMonth(aDate) 
    local aDateCopy 
    copy aDate to aDateCopy 
    set day of aDateCopy to 1 
    if month of aDateCopy is December then 
     set year of aDateCopy to ((year of aDateCopy) + 1) 
     set month of aDateCopy to 1 
    else 
     set month of aDateCopy to ((month of aDateCopy) + 1) 
    end if 
    return day of (aDateCopy - 1 * days) 
end GetNumberOfDaysInMonth 

、働く:ここにいることを修正する機能がありますうるう年であっても、すべての日付で正しく表示されます。

-1

以下のスクリプトは、あなたが探している2つのルーチンが含まれていますGetlastDayとisWorkingDayを:

set myDate to current date -- just for example ! 

set N to GetlastDay(myDate) 
log N --> number of days in month of myDate 
set A to IsWorkingday(myDate) 
log A --> true if Monday to Friday, false if Saturday/Sunday 


on GetlastDay(LDate) -- return last day of month of LDate 
copy LDate to L -- to not change LDate 
set L's day to 32 -- = first day of next month 
set L to L - (1 * days) -- last day of month 
return day of L 
end GetlastDay 

on IsWorkingday(LDate) -- true if date is not Saturday or Sunday 
set SD to weekday of LDate 
return (SD is not in {Saturday, Sunday}) 
end IsWorkingday 
+0

多くのVadianに感謝します。はい、引用符を削除するようにスクリプトを更新しました。申し訳ありません – pbell

+0

'GetlastDay'関数は、31日間の月間にのみ機能します。 – mklement0

関連する問題