2016-10-14 16 views
1
#include <GUIConstantsEx.au3> 
#include <GuiMonthCal.au3> 
#include <WindowsConstants.au3> 

Global $g_idMemo 

Example() 

Func Example() 
    Local $idMonthCal 
    ; Create GUI 
    GUICreate("Month Calendar Get First DOW String", 400, 300) 
    $idMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, $WS_BORDER, 0x00000000) 
    ; Create memo control 
    $g_idMemo = GUICtrlCreateEdit("", 4, 168, 392, 128, 0) 
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") 
    GUISetState(@SW_SHOW) 
    ; Get/Set first DOW 
    _GUICtrlMonthCal_SetFirstDOW($idMonthCal, 0) 
    MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal)) 
    Do 
    Until GUIGetMsg() = $GUI_EVENT_CLOSE 
    GUIDelete() 
EndFunc 

; Write message to memo 
Func MemoWrite($sMessage) 
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) 
EndFunc 

Эта строка просто возвращает «Понедельник». Я хочу, чтобы вернуться «в понедельник 10 октября, 2016»Как я могу получить дату первого дня недели?

MemoWrite("First DOW" & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal)) 

Я неопытный с AutoIT и учусь, и его сложно. Поэтому, пожалуйста, простите меня, если этот вопрос звучит слишком новичком. Спасибо

ответ

1

Вы не ищите функцию _GUICtrlMonthCal_GetFirstDOW. Он вернет установленный в настоящий момент «первый день столбца» вашего компонента календаря. Это означает, что вы сначала установите его в «понедельник», а затем всегда будете иметь «воскресенье». Это просто настраивает, какой день будет в первом столбце вашего месяца. Ли левая верхняя начинается с воскресенья или другого дня.

Что вы, скорее всего, захотите использовать, это _GUICtrlMonthCal_GetCurSelStr($idMonthCal, "%02d/%02d/%04d"), а затем, возможно, выполните некоторую математику, чтобы разрешить это в понедельник недели, в которой вы выбрали день в своем месячном календаре.

Вы можете использовать _DateAdd('d', -(_DateToDayOfWeek(@YEAR, @MON, @MDAY) - 1), _NowCalcDate()), чтобы рассчитать дату последнего воскресенья на текущей неделе.

0

Есть несколько способов сделать это. Я покажу вам один путь.

В попытке сохранить ваш код красивым и аккуратным, я бы поместил все в отдельную функцию и назовет ее при необходимости. Сегодня мы собираемся построить один и назвать его:

analyzeDate()

Что эта функция будет делать волю подсчитать, сколько дней назад последний понедельник был, а затем получить дату. Использование двух предопределенных функций вернет дату в формате YYYY/MM/DD. Чтобы получить результаты, которые вы ищете, мы можем разделить дату на год, месяц и день (соответственно), проанализировать месяц, а затем настроить дату в формате, который вы хотите.

См. Пример функции ниже.

Func analyzeDate()                 
    $iLastMon = _DateToDayOfWeek(@YEAR, @MON, @MDAY) - 2        
    ;MsgBox(0,"","Last Monday was " & $iLastMon & " days ago." & @LF)    
    $sLastMon = _DateAdd("D", ($iLastMon * -1), @YEAR & "/" & @MON & "/" & @MDAY) 
    ;MsgBox(0,"","Last Monday was " & $sLastMon & @LF)        
    global $tDate = ""                

    $newDate = StringSplit($sLastMon, "/")           
    If $newDate[2] = 1 Then               
     $tDate = "January " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 2 Then              
     $tDate = "Febuary " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 3 Then              
     $tDate = "March " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 4 Then              
     $tDate = "April " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 5 Then              
     $tDate = "May " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 6 Then              
     $tDate = "June " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 7 Then              
     $tDate = "July " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 8 Then              
     $tDate = "August " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 9 Then              
     $tDate = "September " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 10 Then              
     $tDate = "October " & $newDate[3] & ", " & $newDate[1] 
    ElseIf $newDate[2] = 11 Then 
     $tDate = "November " & $newDate[3] & ", " & $newDate[1] 
    ElseIf $newDate[2] = 12 Then 
     $tDate = "December " & $newDate[3] & ", " & $newDate[1] 
    Else 
     MsgBox(16,"ERROR", "There was an issue analyzing the date!") 
     $tDate = "ERROR" 
    EndIf 
EndFunc 

Теперь вы можете вызвать эту функцию прямо перед вызовом MemoWrite(), и добавить переменную $ TDate в конце параметра MemoWrite().

Пример:

analyzeDate() 
MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal) & " " & $tDate) 

Теперь ваш полный код будет выглядеть примерно так:

Calendar.au3

#include <GUIConstantsEx.au3> 
#include <GuiMonthCal.au3> 
#include <WindowsConstants.au3> 
; NEW ===================== 
#include <Date.au3>  ; = 
; ========================= 

Global $g_idMemo 

Example() 

Func Example() 
    Local $idMonthCal 
    ; Create GUI 
    GUICreate("Month Calendar Get First DOW String", 400, 300) 
    $idMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, $WS_BORDER, 0x00000000) 
    ; Create memo control 
    $g_idMemo = GUICtrlCreateEdit("", 4, 168, 392, 128, 0) 
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") 
    GUISetState(@SW_SHOW) 
    ; Get/Set first DOW 
    _GUICtrlMonthCal_SetFirstDOW($idMonthCal, 0) 
    ; NEW ============= 
    analyzeDate() ; = 
    ; ================= 
    MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal) & " " & $tDate) ; ADDED: & " " & $tDate 
    Do 
    Until GUIGetMsg() = $GUI_EVENT_CLOSE 
    GUIDelete() 
EndFunc 

; Write message to memo 
Func MemoWrite($sMessage) 
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) 
EndFunc 

; NEW ================================================================================= 
Func analyzeDate()                 ; = 
    $iLastMon = _DateToDayOfWeek(@YEAR, @MON, @MDAY) - 2       ; = 
    ;MsgBox(0,"","Last Monday was " & $iLastMon & " days ago." & @LF)    ; = 
    $sLastMon = _DateAdd("D", ($iLastMon * -1), @YEAR & "/" & @MON & "/" & @MDAY) ; = 
    ;MsgBox(0,"","Last Monday was " & $sLastMon & @LF)        ; = 
    global $tDate = ""                ; = 
                        ; = 
    $newDate = StringSplit($sLastMon, "/")           ; = 
    If $newDate[2] = 1 Then               ; = 
     $tDate = "January " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 2 Then              ; = 
     $tDate = "Febuary " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 3 Then              ; = 
     $tDate = "March " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 4 Then              ; = 
     $tDate = "April " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 5 Then              ; = 
     $tDate = "May " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 6 Then              ; = 
     $tDate = "June " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 7 Then              ; = 
     $tDate = "July " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 8 Then              ; = 
     $tDate = "August " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 9 Then              ; = 
     $tDate = "September " & $newDate[3] & ", " & $newDate[1]     ; = 
    ElseIf $newDate[2] = 10 Then             ; = 
     $tDate = "October " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 11 Then             ; = 
     $tDate = "November " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 12 Then             ; = 
     $tDate = "December " & $newDate[3] & ", " & $newDate[1]      ; = 
    Else                   ; = 
     MsgBox(16,"ERROR", "There was an issue analyzing the date!")    ; = 
     $tDate = "ERROR"               ; = 
    EndIf                   ; = 
EndFunc                    ; = 
; ===================================================================================== 

Выход будет похож на этот :

сегодняшней дата пятница 21 октябрь, 2016.

При запуске программы, вы получите:

First DOW : Monday October 17, 2016 

Я надеюсь, что это помогает!Если у вас возникли проблемы с этим, прокомментируйте ниже и сообщите мне, что происходит. Мы можем понять, как заставить его работать так, как вам нужно.

Спасибо,

Tim

Смежные вопросы