Что нового

Работа с датой, надо от минусовать 30 дней.

komorov74

Новичок
Сообщения
81
Репутация
0
Добрейшего дня.

Столкнулся с траблами.

Имеем сегодняшнюю дату . Формат совпадает с 08.03.2012

Код:
$fdfgf=_NowDate()




как из неё получить вчерашнею.

Код:
$fdfgf=_NowDate()-1



не подходит так как на выходе получаем значение 7.03 а надо хотя бы 07.03

Есть ли какой либо более простой метод кроме всяких парсингов ,переменных и добавлений года в ручную :smile:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
komorov74
Проще,чем так, у меня не получилось:

Код:
; НАЧАЛО

 #Include <Date.au3>
 $DATA="08.03.2012"
 $DATA=StringRegExpReplace($DATA,'(\d{2}).(\d{2}).(\d{4})','$3/$2/$1')
 $DATA=_DateAdd("D",-30,$DATA)
 $DATA=StringRegExpReplace($DATA,'(\d{4})/(\d{2})/(\d{2})','$3.$2.$1')
 MsgBox(0,"",$DATA)

; КОНЕЦ
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
komorov74,
Код:
#include <Date.au3>

Dim $aDay[3] = [20, -1, -30]
For $i = 0 To 2
	ConsoleWrite(_DateTimeFormat(_DateAdd('d', $aDay[$i], _NowCalcDate()), 2) & @LF)
Next
 
Автор
K

komorov74

Новичок
Сообщения
81
Репутация
0
Спасибо!!!!! Чуть переделал.
Код:
;Dim $aDay[3] = [20, -1, -30]
for $aDay=-5 to 0
;For $i = 0 To 2
    ConsoleWrite(_DateTimeFormat(_DateAdd('d', $aDay, _NowCalcDate()), 2) & @LF)
; Next
 next



В итоге получили :
03.03.2012
04.03.2012
05.03.2012
06.03.2012
07.03.2012
08.03.2012

Для меня то что надо!!!!

Жалко , что гибкость языка ,перекрывает функционал (коломбурчик).

БЛИН, пока читал наткнулся на ответ в другой ветке ,в принципе на такой же вопрос.
А ведь до этого искал ПОИСКОМ на форуме!!!!!!!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Дата в компьютере представлена обычным 64-разрядным числом, представляющим количество 100-наносекундных интервалов с 1 января 1601 года (UTC). Вот и отнимайте от этого числа нужное количество наносекунд.

Код:
#Include <Date.au3>

$tFT = _Date_Time_GetSystemTimeAsFileTime()

; Текущая дата
$tLT = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($tFT))
ConsoleWrite(_Date_Time_FileTimeToStr($tLT) & @CR)

$tInt = DllStructCreate('uint64', DllStructGetPtr($tFT))
DllStructSetData($tInt, 1, DllStructGetData($tInt, 1) - 30 * 24 * 60 * 60 * 10000000)

; Текущая дата - 30 дней
$tLT = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($tFT))
ConsoleWrite(_Date_Time_FileTimeToStr($tLT) & @CR)
 
Верх