I need a script that adds a given number of days to a selected date (format dd/mm/yyyy).
After calculating, the new date should be pasted directly into the current text editor or shown so I can copy it.
How can I do this? The code I tried didn’t work (There are some Portuguese terms in the code. If this makes it difficult to understand, please let me know.)
Code: Select all
^!t::
ClipSaved := ClipboardAll
Clipboard := "" ; zera para garantir detecção
SendInput, ^{vk43} ; Ctrl+C (compatível com layout ABNT2)
ClipWait, 0.7
if (ErrorLevel) {
Clipboard := ClipSaved
MsgBox, 48, Aviso Prévio, Não consegui copiar a seleção. Selecione uma data dd/mm/aaaa e tente novamente.
return
}
sel := Trim(Clipboard)
Clipboard := ClipSaved
; Captura data no formato dd/mm/aaaa
if !RegExMatch(sel, "\b(\d{2})/(\d{2})/(\d{4})\b", m) {
MsgBox, 48, Aviso Prévio, A seleção não contém uma data no formato dd/mm/aaaa.
return
}
dd := m1, mm := m2, yyyy := m3
; Constrói timestamp para operações de data: yyyymmddHH24MISS
ts := yyyy . mm . dd . "000000"
; Pede os dias de aviso prévio a somar
InputBox, dias, Aviso Prévio, Quantos dias deseja acrescentar (apenas números)?, , 300, 150
if (ErrorLevel) ; cancelado
return
dias := Trim(dias)
; Validação simples: número inteiro (positivo ou zero)
if (!RegExMatch(dias, "^\d+$")) {
MsgBox, 48, Aviso Prévio, Valor inválido. Digite apenas números inteiros (ex.: 30).
return
}
; Soma os dias
EnvAdd, ts, %dias%, Days ; ts permanece em yyyymmddHH24MISS
; Formata de volta para dd/MM/yyyy
FormatTime, novaData, %ts%, dd/MM/yyyy
; Mostra e copia para o clipboard
Clipboard := novaData
MsgBox, 64, Aviso Prévio,
( LTrim
Data original: %dd%/%mm%/%yyyy%
Dias somados: %dias%
Nova data: %novaData%
(A nova data já está no clipboard.)
)
return
