2016-08-20 102 views
1

我正在写一个AppleScript,它每个月都会生成一个MS Excel电子表格。我需要知道当前有多少天,然后每个月都要低谷,并决定给定的一天是平日还是假期。获取AppleScript中的月份的最后一天以及当月的假期

我想我会节省假期(从这个网页http://kalendar365.cz/statni-svatky/2016作为表格,并在本地访问它们)。

我的问题是:

  1. 我如何获得的最后一天在一个月?
  2. 我该如何有效地循环当前月份的所有日期,并决定它是星期日,星期六还是某天在其他地方指定的日期(例如,在xlsx电子表格的文本文件中)?
+0

在香草AppleScript中,您可以通过以下方式获取当前月份的最后一天:1)将变量设置为'当前日期'2)将该日期的'day'属性设置为32以强制溢出。这将日期设置为下个月的第一天。 3)减去一天。 – vadian

+0

让excel计算一下会不会更容易? ['NETWORKDAYS'](https://support.office.com/en-us/article/NETWORKDAYS-function-48e717bf-a7a3-495f-969e-5005e3eb18e7)函数中有一个内置函数,它可以完成所有功能step ... –

+0

@vadian:这不是它的工作方式(至少在OS 10.8以上):将以下3条语句粘贴到脚本编辑器中并运行它们,您将看到结果日期是March _3rd_,而不是3月1日(您可能需要调整日期字符串以匹配您的语言环境):'将日期设置为日期“2016年2月1日”','将日期设置为32','aDate'。 – mklement0

回答

0

pbell's answer是有希望的,但GetLastDay功能不适用于具有少于31个月正常工作天;下面是修复的功能:

# 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日,然后递增月(可能翻滚到下一年),并减去1天,其中工程所有日期都正确,即使在闰年。

-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

相关问题