Skip to content

Commit 3cd02fc

Browse files
committed
Make initializeOrdinal adhere to timeRelative flag
When true, 1st, 2nd, 3rd, ... is converted to date relative to now When false, 1st, 2nd, 3rd, ... is always converted to date before now
1 parent 391a0f1 commit 3cd02fc

1 file changed

Lines changed: 33 additions & 6 deletions

File tree

src/Datetime.cpp

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,15 @@ bool Datetime::isoEnabled = true;
6666
bool Datetime::standaloneDateEnabled = true;
6767
bool Datetime::standaloneTimeEnabled = true;
6868

69-
// When true, HH:MM:SS is assumed to be today if the time > now, otherwise it is
70-
// asumed to be tomorrow. When false, it is always today.
71-
bool Datetime::timeRelative = true;
69+
// When true,
70+
// - HH:MM:SS is assumed to be today if the time > now, otherwise it is assumed to be tomorrow.
71+
// - day name is converted to date relative to now
72+
// - 1st, 2nd, 3rd, ... is converted to date relative to now
73+
// When false,
74+
// - HH:MM:SS is always today.
75+
// - day name is always converted to date before now
76+
// - 1st, 2nd, 3rd, ... is always converted to date before now
77+
bool Datetime::timeRelative = true;
7278

7379
////////////////////////////////////////////////////////////////////////////////
7480
Datetime::Datetime ()
@@ -1456,16 +1462,15 @@ bool Datetime::initializeOrdinal (Pig& pig)
14561462
int d = t->tm_mday;
14571463

14581464
// If it is this month.
1459-
if (d < number &&
1460-
number <= daysInMonth (y, m))
1465+
if (timeRelative && (d < number && number <= daysInMonth (y, m)))
14611466
{
14621467
t->tm_hour = t->tm_min = t->tm_sec = 0;
14631468
t->tm_mon = m - 1;
14641469
t->tm_mday = number;
14651470
t->tm_year = y - 1900;
14661471
t->tm_isdst = -1;
14671472
}
1468-
else
1473+
else if (timeRelative && (1 <= number && number <= d))
14691474
{
14701475
if (++m > 12)
14711476
{
@@ -1479,6 +1484,28 @@ bool Datetime::initializeOrdinal (Pig& pig)
14791484
t->tm_year = y - 1900;
14801485
t->tm_isdst = -1;
14811486
}
1487+
else if (!timeRelative && (d < number && number <= daysInMonth (y, m)))
1488+
{
1489+
if (--m < 1)
1490+
{
1491+
m = 12;
1492+
y--;
1493+
}
1494+
1495+
t->tm_hour = t->tm_min = t->tm_sec = 0;
1496+
t->tm_mon = m - 1;
1497+
t->tm_mday = number;
1498+
t->tm_year = y - 1900;
1499+
t->tm_isdst = -1;
1500+
}
1501+
else if (!timeRelative && (1 <= number && number <= d))
1502+
{
1503+
t->tm_hour = t->tm_min = t->tm_sec = 0;
1504+
t->tm_mon = m - 1;
1505+
t->tm_mday = number;
1506+
t->tm_year = y - 1900;
1507+
t->tm_isdst = -1;
1508+
}
14821509

14831510
_date = mktime (t);
14841511

0 commit comments

Comments
 (0)