25#include <QtCore/QDateTime>
27QVariant timeSince(
const QDateTime &early,
const QDateTime &late)
29 Q_ASSERT(early.isValid());
30 Q_ASSERT(late.isValid());
32 auto secsSince = early.secsTo(late);
35 return SafeString(QStringLiteral(
"0 minutes"));
38 QStringList singularNames;
39 singularNames << QStringLiteral(
"year") << QStringLiteral(
"month")
40 << QStringLiteral(
"week") << QStringLiteral(
"day")
41 << QStringLiteral(
"hour") << QStringLiteral(
"minute");
43 QStringList pluralNames;
44 pluralNames << QStringLiteral(
"years") << QStringLiteral(
"months")
45 << QStringLiteral(
"weeks") << QStringLiteral(
"days")
46 << QStringLiteral(
"hours") << QStringLiteral(
"minutes");
49 seconds << (60 * 60 * 24 * 365)
50 << (60 * 60 * 24 * 30)
56 auto count = secsSince;
58 while (i < seconds.size()) {
59 count = (secsSince / seconds.at(i));
68 QStringLiteral(
"%1 %2").arg(count).arg(pluralNames.at(i - 1)));
71 QStringLiteral(
"%1 %2").arg(count).arg(singularNames.at(i - 1)));
73 if (seconds.size() > i) {
74 auto count2 = (secsSince - (seconds.at(i - 1) * count)) / seconds.at(i);
78 QStringLiteral(
", %1 %2").arg(count2).arg(pluralNames.at(i)));
81 QStringLiteral(
", %1 %2").arg(count2).arg(singularNames.at(i)));
88 bool autoescape)
const
92 if (input.userType() == QMetaType::QDateTime) {
93 d = input.toDateTime();
94 }
else if (input.userType() == QMetaType::QDate) {
95 d.setDate(input.toDate());
96 }
else if (input.userType() == QMetaType::QTime) {
97 d.setTime(input.toTime());
99 d = QDateTime::fromString(
getSafeString(input), u
"yyyy-MM-ddThh:mm:ss.zzz");
104 if (!argString.get().isEmpty())
105 return d.toString(argString);
107 return d.toString(u
"MMM. d, yyyy");
111 bool autoescape)
const
115 if (input.userType() == QMetaType::QDateTime) {
116 d = input.toDateTime();
117 }
else if (input.userType() == QMetaType::QDate) {
118 d.setDate(input.toDate());
119 }
else if (input.userType() == QMetaType::QTime) {
120 d.setTime(input.toTime());
122 d = QDateTime::fromString(
getSafeString(input), u
"yyyy-MM-ddThh:mm:ss.zzz");
126 return d.toString(argString);
131 bool autoescape)
const
135 if (argument.userType() != qMetaTypeId<QDateTime>())
136 late = QDateTime::currentDateTime();
138 late = argument.toDateTime();
140 auto early = input.toDateTime();
141 if (!early.isValid())
143 return timeSince(early, late);
148 bool autoescape)
const
152 if (argument.userType() != qMetaTypeId<QDateTime>())
153 early = QDateTime::currentDateTime();
155 early = argument.toDateTime();
157 auto late = input.toDateTime();
160 return timeSince(early, late);
A QString wrapper class for containing whether a string is safe or needs to be escaped.
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
Cutelee::SafeString getSafeString(const QVariant &input)
Utility functions used throughout Cutelee.