LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: ldir on August 12, 2016, 01:30:02 PM

Title: функция dateFormat
Post by: ldir on August 12, 2016, 01:30:02 PM
Здравствуйте!
Возникла необходимость перевести дату в формат, например "12 августа 2016". Функция dateFormat с параметром "dd MMMM yyyy" выдает "12 Август 2016". Быть может я неправильно задаю формат? Подскажите как правильно. Если же функция этого не умеет, то чем ее можно заменить? И еще вопрос. Где можно подробнее почитать про скрипты? А то пробовал ради эксперимента воткнуть в скрипт вот это: var docDate = new QDate(2016,8,12);  и получил ReferenceError: Can't find variable: QDate.

С уважением, Иван.
Title: Re: функция dateFormat
Post by: Arin Alex on August 12, 2016, 09:42:59 PM
Приветствую!

dateFormat() это обертка вокруг QLocale().toString(value.toDate(),format) и под виндами длинный формат месяца выдает коряво :(
Вы можете написать собственную функцию для форматирования даты и подключить её к scriptEngine.

вот пример функции dateFormat:
Code: [Select]
QScriptValue dateFormat(QScriptContext* pcontext, QScriptEngine* pengine){
    QVariant value = pcontext->argument(0).toVariant();
    QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"dd.MM.yyyy";
    QScriptValue res = pengine->newVariant(QLocale().toString(value.toDate(),format));
    return res;
}

подключается функция следующим образом
Code: [Select]
report->scriptManager()->addFunction("dateFormat",dateFormat,"DATE&TIME", "dateFormat(\""+tr("Value")+"\",\""+tr("Format")+"\")");

Только, надо забрать свежие исходники с github  ;) я их поправил чтоб функция нормально подключалась

Quote
Где можно подробнее почитать про скрипты? А то пробовал ради эксперимента воткнуть в скрипт вот это: var docDate = new QDate(2016,8,12);  и получил ReferenceError: Can't find variable: QDate.

Скрипты описаны в документации к Qt (QScriptEngine). QDate не прикручен к скриптовому движку :)
Title: Re: функция dateFormat
Post by: ldir on August 12, 2016, 11:28:18 PM
Спасибо большое!
С датой все получилось. Теперь жду версию 1.4. Я правильно понял, в одной из тем форума были обещаны многостраничные документы?
Title: Re: функция dateFormat
Post by: Arin Alex on August 13, 2016, 12:28:18 AM
Да в версии 1.4 добавлено:

Многостраничные отчеты
Возможность редактирования сформированного отчета
Инициализационный скрипт
Возможность использовать диалоги

ну и так по мелочи :)
Title: Re: функция dateFormat
Post by: ldir on August 13, 2016, 09:38:37 AM
Arin Alex, чудесно.
Да, хочу поблагодарить за такую полезную программу. До этого пользовался обычными html документами - не очень удобно, вечно какие-то грабли были.
Title: Re: функция dateFormat
Post by: Subst on August 13, 2016, 04:15:13 PM
А я вообще в сам отчет запихал примерно следующее для таких случаев, дабы максимально разделить "ядро" программы и отчетную часть

$S{
 var months=new  Array("","января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");

var day=dateFormat($D{students.diploma_date},"dd").toString();
var month=parseInt(dateFormat($D{students.diploma_date},"MM"),10);
var year=dateFormat($D{students.diploma_date},"yyyy").toString();

day+" "+months[month]+" "+year+" года";
 }