Перейти к содержимому

Фотография

Получить произвольное значение даты при помощи aqDateTime


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 28 февраля 2012 - 12:28

Доброго времени суток.
На форме есть два поля: "дата начала" (значение равно текущей дате) и "дата окончания".
С текущей все понятно, она получается так: aqDateTime.Today().
Можно ли каким-то образом для "даты окончания" получить значение равное, например, текущая дата + 1 год?(365 дней?)
То есть если сегодня 28.02.2012 - получить надо 28.02.2013.
  • 0

#2 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 28 февраля 2012 - 13:44

Можно использовать aqDateTime.AddMonths или aqDateTime.SetDateElements:

// JScript
newDate = aqDateTime.AddMonths(today, 12);
newDate = aqDateTime.SetDateElements(aqDateTime.GetYear(today) + 1, aqDateTime.GetMonth(today), aqDateTime.GetDay(today))


Метода aqDateTime.AddYears в TestComplete почему-то нет :(



Upd: aqDateTime.SetDateElements кинет ошибку, если исходная дата - 29 февраля.

А aqDateTime.AddMonths(29 февраля, 12) вернет 1 марта.

Сообщение отредактировал modbear: 05 марта 2012 - 15:20

  • 0

#3 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 28 февраля 2012 - 13:52

здесь ошибочный пост
  • 0

#4 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 28 февраля 2012 - 13:52

здесь ошибочный пост
  • 0

#5 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 28 февраля 2012 - 14:07

Надо использовать

newDate = aqDateTime.AddDays(today, 365)

А если високосный год? :)
  • 0

#6 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 28 февраля 2012 - 14:12

Надо использовать

newDate = aqDateTime.AddDays(today, 365)

А если високосный год? :)


Накосячил я...
Забудьте.
  • 0

#7 Mrak

Mrak

    Новый участник

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 05 марта 2012 - 12:37

Ну вот тупой пример прибавления года:
- получаем текущий год в виде строки
year = aqConvert.DateTimeToFormatStr(aqDateTime.Now(), "%Y")
- переводим строку в число (вторым параметром лучше сразу указать десятичную систему:))
var i = parseInt(q, 10);
- прибавляем единицу.
i++
на выходе получаем текущий год + 1
  • 0

#8 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 05 марта 2012 - 13:40

Ну вот тупой пример прибавления года:
- получаем текущий год в виде строки
year = aqConvert.DateTimeToFormatStr(aqDateTime.Now(), "%Y")
- переводим строку в число (вторым параметром лучше сразу указать десятичную систему:))
var i = parseInt(q, 10);
- прибавляем единицу.
i++
на выходе получаем текущий год + 1


Замечание modbear по моему посту насчет високосного года навело на мысль, что просто добавлять 1 к году недостаточно.
А если текущая дата 29 февраля ?
  • 0

#9 Mrak

Mrak

    Новый участник

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Мрак Просто Мрак

Отправлено 05 марта 2012 - 14:00


Ну вот тупой пример прибавления года:
- получаем текущий год в виде строки
year = aqConvert.DateTimeToFormatStr(aqDateTime.Now(), "%Y")
- переводим строку в число (вторым параметром лучше сразу указать десятичную систему:))
var i = parseInt(q, 10);
- прибавляем единицу.
i++
на выходе получаем текущий год + 1


Замечание modbear по моему посту насчет високосного года навело на мысль, что просто добавлять 1 к году недостаточно.
А если текущая дата 29 февраля ?


У меня кроме как шаманства с бубном и конвертацией нет мыслей.
Но вообще тогда ставим проверку (делим текущий год на 4) и если получается целое значение то текущий год високосный. и тогда ставим вторую проверку. номер месяца. если февраль (02), проверяем текущий день, если 29, то соответственно при прибавлении года, вычитаем или прибавляем день.
Тогда соответственно нам придется описанные выше действия выполнять не только для года но еще и для дня и месяца.

Но это, на самом деле, изврат дикий, и стоит ли ради одного дня раз в 4 года изобретать подобный велосипед.
  • 0

#10 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 05 марта 2012 - 14:05

Какое уж тут шаманство..
Если писать на Дельфи, тогда можно подсмотреть в его библиотеках функцию определения високосного года (4 года, 400 лет, 1000 лет).
  • 0

#11 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 05 марта 2012 - 15:04

Если писать на Дельфи, тогда можно подсмотреть в его библиотеках функцию определения високосного года (4 года, 400 лет, 1000 лет).

В TestComplete, кстати, для этого есть встроенная функция - aqDateTime.IsLeapYear.
  • 0

#12 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 05 марта 2012 - 15:05



Ну вот тупой пример прибавления года:
- получаем текущий год в виде строки
year = aqConvert.DateTimeToFormatStr(aqDateTime.Now(), "%Y")
- переводим строку в число (вторым параметром лучше сразу указать десятичную систему:))
var i = parseInt(q, 10);
- прибавляем единицу.
i++
на выходе получаем текущий год + 1


Замечание modbear по моему посту насчет високосного года навело на мысль, что просто добавлять 1 к году недостаточно.
А если текущая дата 29 февраля ?


У меня кроме как шаманства с бубном и конвертацией нет мыслей.
Но вообще тогда ставим проверку (делим текущий год на 4) и если получается целое значение то текущий год високосный. и тогда ставим вторую проверку. номер месяца. если февраль (02), проверяем текущий день, если 29, то соответственно при прибавлении года, вычитаем или прибавляем день.
Тогда соответственно нам придется описанные выше действия выполнять не только для года но еще и для дня и месяца.

Но это, на самом деле, изврат дикий, и стоит ли ради одного дня раз в 4 года изобретать подобный велосипед.




вообще год=12 месяцев..тобишь если надо увеличить на год, достаточно aqDateTime.AddMonths(aqDateTime.Now(),12);
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных