Properly handle negative years when printing JS Dates to strings.
JavaScript knows a year 0. That is correctly translated into QDateTime terms when creating a Date object, but it's not correctly translated back when converting the JavaScript date to a string. Task-number: QTBUG-29491 Change-Id: I46b200a144434187656d08e87f422f97523acd0e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit is contained in:
parent
f876562de8
commit
f06daaf3d8
|
@ -557,7 +557,13 @@ static inline QString ToString(double t)
|
|||
{
|
||||
if (std::isnan(t))
|
||||
return QStringLiteral("Invalid Date");
|
||||
QString str = ToDateTime(t, Qt::LocalTime).toString() + QStringLiteral(" GMT");
|
||||
QDateTime dateTime = ToDateTime(t, Qt::LocalTime);
|
||||
|
||||
// JavaScript knows a year 0, while QDateTime doesn't. So, in order to show the right date we
|
||||
// have to add a year to negative ones here.
|
||||
if (dateTime.date().year() < 0)
|
||||
dateTime = dateTime.addYears(1);
|
||||
QString str = dateTime.toString() + QStringLiteral(" GMT");
|
||||
double tzoffset = LocalTZA + DaylightSavingTA(t);
|
||||
if (tzoffset) {
|
||||
int hours = static_cast<int>(::fabs(tzoffset) / 1000 / 60 / 60);
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
import QtQuick 2.0
|
||||
import Qt.test 1.0
|
||||
|
||||
Item {
|
||||
function check_negative() {
|
||||
return "result: " + new Date(-2000, 0, 1);
|
||||
}
|
||||
}
|
|
@ -200,6 +200,7 @@ private slots:
|
|||
void sequenceSort();
|
||||
void dateParse();
|
||||
void utcDate();
|
||||
void negativeYear();
|
||||
void qtbug_22464();
|
||||
void qtbug_21580();
|
||||
void singleV8BindingDestroyedDuringEvaluation();
|
||||
|
@ -7378,6 +7379,22 @@ void tst_qqmlecmascript::utcDate()
|
|||
QVERIFY(q.toBool() == true);
|
||||
}
|
||||
|
||||
void tst_qqmlecmascript::negativeYear()
|
||||
{
|
||||
QQmlComponent component(&engine, testFileUrl("negativeyear.qml"));
|
||||
|
||||
QObject *object = component.create();
|
||||
if (object == 0)
|
||||
qDebug() << component.errorString();
|
||||
QVERIFY(object != 0);
|
||||
|
||||
QVariant q;
|
||||
QMetaObject::invokeMethod(object, "check_negative",
|
||||
Q_RETURN_ARG(QVariant, q));
|
||||
// Strip the timezone. It should be irrelevant as the date was created with the same one.
|
||||
QCOMPARE(q.toString().left(32), QStringLiteral("result: Mon Jan 1 00:00:00 -2000"));
|
||||
}
|
||||
|
||||
void tst_qqmlecmascript::concatenatedStringPropertyAccess()
|
||||
{
|
||||
QQmlComponent component(&engine, testFileUrl("concatenatedStringPropertyAccess.qml"));
|
||||
|
|
Loading…
Reference in New Issue