1 votos

Fecha de cálculo en AppleScript. Los números de la semana y su fecha de inicio

Quiero escribir un AppleScript que crea proyectos en OmniFocus donde sus aplazar la fecha y la fecha de vencimiento se establece en cualquiera de las semanas de inicio y final del día.

El resultado debería parecerse a esto:

weeknumber: day1. month1. year1 - day2. month2. year2

Donde weeknumber es reemplazado con una semana de' número de la semana. day1, month1 y year1 tome weeknumbers' número de la semana y analizarlo para que los días de su fecha. Así que para la semana número 09 en 2016 que sería 29. 02. 2016. Los primeros fines de semana (day2 y así sucesivamente) final en 06. 02. 2016. Por lo que el resultado para la primera semana de 2016 tendría este aspecto:

09: 29. 02. 2016 - 06. 02. 2016

A partir de la cáscara es posible obtener el último día de un mes así:

date -v 1d -v 3m -v 16y -v -1d +'%V: %d. %m. %Y'
09: 29. 02. 2016

En AppleScript puede convertir cualquier cadena, por ejemplo, de regresar de un script de shell (date) en un objeto date con la sintaxis:

set lastDayShell to do shell script "date -v 1d -v 3m -v 16y -v -1d +'%V: %d. %m. %Y'"
set lastDay to date lastDayShell

El comando para agregar un nuevo proyecto para OmniFocus es este:

tell application "OmniFocus"
    tell default document
        set weekNumbers to folder "Week Numbers"
        tell weekNumbers
            set project1 to make new project with properties {name:"09: 29. 02. 2016", defer date:firstDay, due date:lastDay, singleton action holder:true}
        end tell
    end tell
end tel

Yo sé todo eso. Yo simplemente no puede encontrar un recurso que dice cómo obtener el primer y último día de la semana. Quiero establecer la aplazar la fecha de todas las semanas de empezar el primero de la semana, y la fecha de vencimiento para el último día.

2voto

Gracias a @ryan-m del comentario he encontrado una solución. Resulta date(1) es realmente cool. Su capacidad para hacer "ajustes", fueron la respuesta.

Usted puede decirle a date simplemente "ir a" en un día en particular mediante el uso de -v. Usted puede utilizar más y menos para "ajustar" a la fecha en la otra -v. Así, por ejemplo:

date -v 1w -v 16y

Va a ir para el primer mes de 2016. (O una fecha que contiene esa fecha).

Con un ajuste que puede caminar a través de las fechas:

date -v +1w -v +0d -v 16y
date -v +1w -v +6d -v 16y

Esto va para la primera semana de 2016. El segundo comando va desde el comienzo de la primera semana de 6 días de antelación. Este es el 10 de enero de 2016. -v +2w sería la segunda semana, y así sucesivamente. Es evidente que parte puede ser automatizado aquí.

Todo lo que +'string' al final no es de los formatos de la fecha en que usted está en la manera en que quieres que se muestre. Puedo usar esto en mi script para hacer una fecha, la cadena que AppleScript s date comando entiende. Por favor, no confundir el comando de shell date(1) con el AppleScript date comando.

Este es el script que terminó, por cierto:

repeat with weekNumber from 1 to 52
    set weekStartShell to (do shell script "date -v +" & weekNumber & "w -v +0d -v 16y +'%d. %m. %Y'")
    set weekStart to date weekStartShell
    set weekEndShell to do shell script "date -v +" & weekNumber & "w -v +6d -v 16y +'%d. %m. %Y'"
    set weekEnd to date (weekEndShell & " 23:59:59")
    set projectName to (("CW" & weekNumber & ": " & weekStartShell & " - " & weekEndShell) as string)

    tell application "OmniFocus"
        tell folder "Day Projects" of default document
            set projectWeek to make new project with properties {name:projectName, defer date:weekStart, due date:weekEnd, singleton action holder:true}

        end tell
    end tell

end repeat

Tenga en cuenta que para utilizar AppleScript s set var to date "date-string" usted tiene que dar una cadena en su lugar. En Europa la cadena de es 01. 02. 2016 23:59:59. En estados unidos esto es probablemente algo como 2016/02/01 23:59:59. Es necesario modificar estas en las variables en el script. (+'%Y/%m/%d' al final)

0voto

Ryan M Puntos 1

Creo que este debería obtener lo que desea, suponiendo que usted desea que el primer sábado de mes.

En primer lugar, vamos a empezar con la obtención de su último día de mes con la secuencia de comandos que se utiliza, pero la producción como tiempo UNIX.

START=$(date -v 1d -v 3m -v 16y -v -1d +'%s') # given date in seconds

Ahora podemos encontrar el primer sábado del mes de esta fecha.

# parse the given date time
# move to the first of the month (-v1d)
# move to the 6th day of the week (-v6w)

date -v1d -v6w -jf '%s' $START '+ %a %d %b % Y'

# Result: Sat 06 Feb 2016

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X