Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: функция dateFormat  (Read 5290 times)

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
функция dateFormat
« 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.

С уважением, Иван.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: функция dateFormat
« Reply #1 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 не прикручен к скриптовому движку :)

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
Re: функция dateFormat
« Reply #2 on: August 12, 2016, 11:28:18 pm »
Спасибо большое!
С датой все получилось. Теперь жду версию 1.4. Я правильно понял, в одной из тем форума были обещаны многостраничные документы?

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: функция dateFormat
« Reply #3 on: August 13, 2016, 12:28:18 am »
Да в версии 1.4 добавлено:

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

ну и так по мелочи :)

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
Re: функция dateFormat
« Reply #4 on: August 13, 2016, 09:38:37 am »
Arin Alex, чудесно.
Да, хочу поблагодарить за такую полезную программу. До этого пользовался обычными html документами - не очень удобно, вечно какие-то грабли были.

Subst

  • Sr. Member
  • ****
  • Posts: 450
    • View Profile
Re: функция dateFormat
« Reply #5 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+" года";
 }