|
По роду деятельности потребовалось узнавать вчерашнюю дату. Т.е. дату, которая была 1 день назад :D
В различного рода фреймворках есть много всяких рюшечек, как это можно узнать, Но у нас не фреймворк, у нас клевая lua. Мы сделаем это сами.
Решение в лоб. Сначала определим таблицу, в которой каждому месяцу будем сопоставлять количество дней:
months = {
[1] = 31,
[2] = getDaysInFeb(),
[3] = 31,
[4] = 30,
[5] = 31,
[6] = 30,
[7] = 31,
[8] = 31,
[9] = 30,
[10] = 31,
[11] = 30,
[12] = 31
}
Обратите внимание, что в феврале заведомо неизвестно количество дней, т.к. год у нас может быть високосным (29 дней), а может быть и не високосным(28 дней)
Реализация метода getDaysInFeb():
function getDaysInFeb()
-- используется сторонняя библиотека для работы с датой и временем
local year = date()
year = year:getyear()
-- если текущий год кратный 4, но не кратный 100, или кратный 400,
-- то это високосный год
if (year%4 == 0 and year%100 ~= 0) or (year%400 == 0) then
return 29
else
return 28
end
end
Теперь у нас есть все что нужно для дальнейшей работы.
Сам алгоритм определения вчерашней даты такой:
-- <strong>в переменных month, year, day уже заранее установлены соответстующие значения</strong>
-- если вчера было 0-е число, то вчера был не сегодняшний месяц
if (day - 1 <= 0) then
-- узнаем блять порядковый номер месяца
-- если текущий месяц 1 или меньше(на всяк случай), то вчера был декабрь
-- предыдущего года
if tonumber(month) <= 1 then
month = 12
-- если сегодня январь, а вчера быль декабрь, то значт и год вчера был другой
year = year - 1
yyear = yyear - 1
else
-- нет, не январь, значит просто -1 месяц
month = month - 1
end
-- устанавливаем вчерашнее число, как последнее число вчерашнего месяца
-- таблица months определена выше
day = months[month]
else
-- халява, вчера был сегодняшний месяц
day = day - 1
end
Удачи :)
|