Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
11.02.2015 23:05:31
1. Формат dd.mm.yyyy заменяете на (%d%d)%p(%d%d)%p(%d%d%d%d) 2. применяете к строке даты функцию string.match по маске выше. Получаете 3 строки. 3. складываете эти 3 полученные строчки как вам нужно
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
11.02.2015 23:24:36
Со 2-м и 3-м пунктом понятно. По 1-му пункту нужно именно задавать в "человеческом" формате: "dd.mm.yyyy", "yyyy-mm-dd", "dd/mm/yy", "yyyymmdd" и т.д. Можно как в Эксель: "D.M.YY", "YY-M-D", "D/M/Y", "YYMD"
Надо делать так, как надо. А как не надо - делать не надо.
function DateFormat(date, input_fmt, output_fmt)
local day = tonumber(date:sub(input_fmt:find("([d|D]+)")))
local month = tonumber(date:sub(input_fmt:find("([m|M]+)")))
local year = tonumber(date:sub(input_fmt:find("([Y|y]+)")))
local d_start, d_end = output_fmt:find("([d|D]+)")
local m_start, m_end = output_fmt:find("([m|M]+)")
local y_start, y_end = output_fmt:find("([Y|y]+)")
local outstr = output_fmt:gsub("([d|D]+)", string.format("%0".. d_end-d_start+1 .."d", day))
local outstr = outstr:gsub("([m|M]+)", string.format("%0".. m_end-m_start+1 .."d", month))
local outstr = outstr:gsub("([y|Y]+)", string.format("%0".. y_end-y_start+1 .."d", year))
return outstr
end
print(DateFormat("11.02.2015", "dd.mm.yyyy", "yyyy.mm.dd")) -- 2015.02.11
print(DateFormat("11.02.2015", "dd.mm.yyyy", "mm.dd.YYYY")) -- 02.11.2015
print(DateFormat("20150201", "yyyymmdd", "yyyy mmmm dd")) -- 2015 0002 01
print(DateFormat("20150201", "yyyymmdd", "yyyy mmmm d")) -- 2015 0002 1
print(DateFormat("20150201", "yyyymmdd", "yyyy mm dd")) -- 2015 02 01
print(DateFormat("01/02/1999", "dd/mm/yyyy", "yyyy/mm/dd")) -- 1999/02/01
без всяких проверок, вставьте их сами если надо
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
12.02.2015 16:09:45
Michael Bulychev, спасибо. Однако, маленькая ремарка: в паттернах Lua нет "или", поэтому использование символа "|" будет лишним
Надо делать так, как надо. А как не надо - делать не надо.
Michael Bulychev
Гость
13.02.2015 05:19:23
Цитата
Серж пишет: Michael Bulychev , спасибо. Однако, маленькая ремарка: в паттернах Lua нет " или ", поэтому использование символа " | " будет лишним
Да, спасибо. Издержки PCRE.
Пользователь
Сообщений: Регистрация: 30.01.2015
13.02.2015 22:51:24
Если без особых выкрутасов, то можно упростить:
function DateFormat(date, input_fmt, output_fmt) local day = date:sub(input_fmt:find("([d|D]+)") local month = date:sub(input_fmt:find("([m|M]+)") local year = date:sub(input_fmt:find("([Y|y]+)") local outstr = output_fmt:gsub("([d|D]+)", day) local outstr = outstr:gsub("([m|M]+)", month) local outstr = outstr:gsub("([y|Y]+)", year) return outstr end
примерно в 2 раза быстрее.
Michael Bulychev
Гость
16.02.2015 04:37:28
Цитата
Николай Камынин пишет: Если без особых выкрутасов, то можно упростить:
function DateFormat(date, input_fmt, output_fmt) local day = date:sub(input_fmt:find("([d|D]+)" ;) local month = date:sub(input_fmt:find("([m|M]+)" ;) local year = date:sub(input_fmt:find("([Y|y]+)" ;) local outstr = output_fmt:gsub("([d|D]+)", day) local outstr = outstr:gsub("([m|M]+)", month) local outstr = outstr:gsub("([y|Y]+)", year) return outstr end
примерно в 2 раза быстрее.
Добрый день. Только работает не так как в моем примере.
Пользователь
Сообщений: Регистрация: 30.01.2015
16.02.2015 07:42:46
Добрый день, ну да, "без выкрутасов": ------------------------------- есть общепринятые форматы дат. А это: 2015 0002 01, 2015 0002 01 не дата и не число. а последовательность цифр и пробелов.
Пользователь
Сообщений: Регистрация: 04.03.2015
19.08.2015 15:11:38
Добрый день! А как без ифов и прочего отформатировать число 1 в 01? Как задать формат отображения с кол-вом разрядов, что-ли.. например хочу 1 в трех разрядах, получаю - 001 в двух - 01 если число 12 то оно 12 и на выходе. Как то просто должно делаться.. Помогите, пожалуйста.
Пользователь
Сообщений: Регистрация: 30.01.2015
19.08.2015 15:15:00
Цитата
Viktor MMM пишет: Добрый день! А как без ифов и прочего отформатировать число 1 в 01? Как задать формат отображения с кол-вом разрядов, что-ли.. например хочу 1 в трех разрядах, получаю - 001 в двух - 01 если число 12 то оно 12 и на выходе. Как то просто должно делаться.. Помогите, пожалуйста.
string.format("%02i",number)
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 04.03.2015
19.08.2015 15:17:53
Спасибо, большое, Михаил! То,что нужно. Перебирал форматы, не догадался.