25 #include <QtCore/QDateTime>
27 QVariant 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 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
100 d = QDateTime::fromString(
getSafeString(input), QStringLiteral(
"yyyy-MM-ddThh:mm:ss"));
102 d = QDateTime::fromString(
getSafeString(input), QStringLiteral(
"yyyy-MM-ddThh:mm:ss.zzz"));
108 if (!argString.get().isEmpty())
109 return d.toString(argString);
111 return d.toString(QStringLiteral(
"MMM. d, yyyy"));
115 bool autoescape)
const
119 if (input.userType() == QMetaType::QDateTime) {
120 d = input.toDateTime();
121 }
else if (input.userType() == QMetaType::QDate) {
122 d.setDate(input.toDate());
123 }
else if (input.userType() == QMetaType::QTime) {
124 d.setTime(input.toTime());
126 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
127 d = QDateTime::fromString(
getSafeString(input), QStringLiteral(
"yyyy-MM-ddThh:mm:ss"));
129 d = QDateTime::fromString(
getSafeString(input), QStringLiteral(
"yyyy-MM-ddThh:mm:ss.zzz"));
134 return d.toString(argString);
139 bool autoescape)
const
143 if (argument.userType() != qMetaTypeId<QDateTime>())
144 late = QDateTime::currentDateTime();
146 late = argument.toDateTime();
148 auto early = input.toDateTime();
149 if (!early.isValid())
151 return timeSince(early, late);
156 bool autoescape)
const
160 if (argument.userType() != qMetaTypeId<QDateTime>())
161 early = QDateTime::currentDateTime();
163 early = argument.toDateTime();
165 auto late = input.toDateTime();
168 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.