AppleScript में तारीख की गणना। सप्ताह की संख्या और उनकी आरंभ तिथि


1

मैं एक AppleScript लिखना चाहता हूं जो OmniFocus में प्रोजेक्ट बनाता है जहां उनकी डेफर डेट और नियत तारीख किसी भी सप्ताह के शुरू और अंत के दिन पर सेट होती है।

परिणाम इस तरह दिखना चाहिए:

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

जहां weeknumberएक सप्ताह के सप्ताह की संख्या के साथ प्रतिस्थापित किया गया है। day1, month1और 'सप्ताह की संख्या year1ले लो weeknumberऔर उस दिन की तारीख को पार्स। इसलिए 2016 में सप्ताह संख्या 09 के लिए 29. 02. 2016। पहला सप्ताह समाप्त होता है ( day2और आगे) समाप्त होता है 06. 02. 2016। तो 2016 के पहले सप्ताह के लिए परिणाम इस तरह दिखेगा:

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

शेल से यह संभव है कि एक महीने का अंतिम दिन ऐसा हो:

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

AppleScript में आप किसी भी स्ट्रिंग को बदल सकते हैं, उदाहरण के लिए एक शेल स्क्रिप्ट ( date) सिंटैक्स के साथ दिनांक ऑब्जेक्ट में लौटाया गया है:

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

ओमनीफोकस में एक नई परियोजना जोड़ने की कमान यह है:

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

मुझे वह सब पता है। मुझे अभी कोई संसाधन नहीं मिला है जो कहता है कि किसी भी सप्ताह का पहला और आखिरी दिन कैसे प्राप्त करें। मैं किसी भी सप्ताह की शुरुआत की तारीख को सप्ताह के पहले तक निर्धारित करना चाहता हूं, और अंतिम दिन को नियत तारीख।

जवाबों:


2

@ Ryan-m की टिप्पणी के लिए धन्यवाद मुझे एक समाधान मिला। पता चला है date(1)वास्तव में बहुत अच्छा है। "समायोजन" करने की इसकी क्षमता जवाब थी।

आप dateबस एक विशिष्ट दिन का उपयोग करके "जाने" के लिए कह सकते हैं -v। फिर आप उस तिथि को दूसरे में "समायोजित" करने के लिए प्लस और माइनस का उपयोग कर सकते हैं -v। उदाहरण के लिए:

date -v 1w -v 16y

2016 के पहले महीने में जाएगा। (या एक तारीख जिसमें वह तारीख शामिल हो)

एक समायोजन के साथ हम तारीखों के माध्यम से चल सकते हैं:

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

यह 2016 के पहले सप्ताह में जाता है। दूसरा आदेश उस पहले सप्ताह की शुरुआत से 6 दिन आगे जाता है। यह जनवरी 2016 की 10 वीं तारीख है। -v +2wयह दूसरा सप्ताह होगा, और आगे भी। यह स्पष्ट है कि कौन सा हिस्सा यहां स्वचालित हो सकता है।

सब कुछ जो +'string'अंत में होता है, वह उस तारीख को प्रारूपित करता है जिस तरीके से आप उसे प्रदर्शित करना चाहते हैं। मैं अपनी स्क्रिप्ट में इसका उपयोग एक तारीख-स्ट्रिंग बनाने के लिए करता हूं जिसे AppleScript की dateकमांड समझती है। कृपया date(1)AppleScript dateकमांड के साथ शेल कमांड को भ्रमित न करें ।

यह वह स्क्रिप्ट है जो मैंने समाप्त की, जिस तरह से:

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

ध्यान दें कि AppleScript का उपयोग set var to date "date-string"करने के लिए आपको इसे अपने लोकेल में एक स्ट्रिंग देना होगा। यूरोप में तार है 01. 02. 2016 23:59:59। अमेरिका में यह शायद कुछ ऐसा है 2016/02/01 23:59:59। आपको स्क्रिप्ट में चर में इन्हें संशोधित करने की आवश्यकता है। ( +'%Y/%m/%d'अंत में)


0

मेरा मानना ​​है कि यह आपको वही मिलना चाहिए जो आप चाहते हैं, यह मानते हुए कि आप किसी दिए गए महीने का पहला शनिवार चाहते हैं।

सबसे पहले, आप अपने द्वारा उपयोग की गई स्क्रिप्ट के साथ महीने के अपने अंतिम दिन की शुरुआत करें, लेकिन UNIX समय के रूप में आउटपुट।

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

अब हम इस तिथि के साथ महीने का पहला शनिवार पा सकते हैं।

# 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

मदद के लिए धन्यवाद, रयान! कि वास्तव में मेरे सवाल का जवाब नहीं था, लेकिन यह मुझे सही दिशा में एक कुहनी से हलका धक्का दिया। जब मैंने स्क्रिप्ट पूरी की तो मैं अपना उत्तर लिखूंगा।
Zettt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.