Skip to content

Commit d9b9f77

Browse files
authored
Merge pull request #10818 from Inkrementator/datePlusDur_commutative
Fix #10783: Datetime: Make adding a Duration to Date commutative
2 parents 3e50ddb + 1018975 commit d9b9f77

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

std/datetime/date.d

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2131,6 +2131,7 @@ public:
21312131
$(BOOKTABLE,
21322132
$(TR $(TD DateTime) $(TD +) $(TD Duration) $(TD -->) $(TD DateTime))
21332133
$(TR $(TD DateTime) $(TD -) $(TD Duration) $(TD -->) $(TD DateTime))
2134+
$(TR $(TD Duration) $(TD +) $(TD DateTime) $(TD -->) $(TD DateTime))
21342135
)
21352136
21362137
Params:
@@ -2145,6 +2146,14 @@ public:
21452146
mixin("return retval._addSeconds(" ~ op ~ "seconds);");
21462147
}
21472148

2149+
/// ditto
2150+
DateTime opBinaryRight(string op)(Duration duration) const @safe pure nothrow @nogc
2151+
if (op == "+")
2152+
{
2153+
return this + duration;
2154+
}
2155+
2156+
21482157
///
21492158
@safe unittest
21502159
{
@@ -2161,6 +2170,9 @@ public:
21612170

21622171
assert(DateTime(2016, 1, 1, 0, 59, 59) - hours(1) ==
21632172
DateTime(2015, 12, 31, 23, 59, 59));
2173+
2174+
assert(DateTime(2015, 12, 31, 23, 59, 59) + hours(1) ==
2175+
hours(1) + DateTime(2015, 12, 31, 23, 59, 59));
21642176
}
21652177

21662178
@safe unittest
@@ -6134,13 +6146,14 @@ public:
61346146
import core.time : Duration;
61356147
/++
61366148
Gives the result of adding or subtracting a $(REF Duration, core,time)
6137-
from
6149+
from this $(LREF Date).
61386150
61396151
The legal types of arithmetic for $(LREF Date) using this operator are
61406152
61416153
$(BOOKTABLE,
61426154
$(TR $(TD Date) $(TD +) $(TD Duration) $(TD -->) $(TD Date))
61436155
$(TR $(TD Date) $(TD -) $(TD Duration) $(TD -->) $(TD Date))
6156+
$(TR $(TD Duration) $(TD +) $(TD Date) $(TD -->) $(TD Date))
61446157
)
61456158
61466159
Params:
@@ -6155,6 +6168,14 @@ public:
61556168
mixin("return retval._addDays(" ~ op ~ "days);");
61566169
}
61576170

6171+
6172+
/// ditto
6173+
Date opBinaryRight(string op)(Duration duration) const @safe pure nothrow @nogc
6174+
if (op == "+")
6175+
{
6176+
return this + duration;
6177+
}
6178+
61586179
///
61596180
@safe unittest
61606181
{
@@ -6165,6 +6186,8 @@ public:
61656186

61666187
assert(Date(2016, 1, 1) - days(1) == Date(2015, 12, 31));
61676188
assert(Date(2004, 3, 1) - days(4) == Date(2004, 2, 26));
6189+
6190+
assert(Date(2004, 2, 26) + days(4) == days(4) + Date(2004, 2, 26));
61686191
}
61696192

61706193
@safe unittest
@@ -8844,6 +8867,7 @@ public:
88448867
$(BOOKTABLE,
88458868
$(TR $(TD TimeOfDay) $(TD +) $(TD Duration) $(TD -->) $(TD TimeOfDay))
88468869
$(TR $(TD TimeOfDay) $(TD -) $(TD Duration) $(TD -->) $(TD TimeOfDay))
8870+
$(TR $(TD Duration) $(TD +) $(TD TimeOfDay) $(TD -->) $(TD TimeOfDay))
88478871
)
88488872
88498873
Params:
@@ -8858,6 +8882,13 @@ public:
88588882
mixin("return retval._addSeconds(" ~ op ~ "seconds);");
88598883
}
88608884

8885+
/// ditto
8886+
TimeOfDay opBinaryRight(string op)(Duration duration) const @safe pure nothrow @nogc
8887+
if (op == "+")
8888+
{
8889+
return this + duration;
8890+
}
8891+
88618892
///
88628893
@safe unittest
88638894
{
@@ -8872,6 +8903,8 @@ public:
88728903
assert(TimeOfDay(12, 12, 12) - minutes(1) == TimeOfDay(12, 11, 12));
88738904
assert(TimeOfDay(12, 12, 12) - hours(1) == TimeOfDay(11, 12, 12));
88748905
assert(TimeOfDay(0, 0, 0) - seconds(1) == TimeOfDay(23, 59, 59));
8906+
8907+
assert(TimeOfDay(12, 12, 12) + seconds(1) == seconds(1) + TimeOfDay(12, 12, 12));
88758908
}
88768909

88778910
@safe unittest

std/datetime/systime.d

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6301,6 +6301,7 @@ public:
63016301
$(BOOKTABLE,
63026302
$(TR $(TD SysTime) $(TD +) $(TD Duration) $(TD -->) $(TD SysTime))
63036303
$(TR $(TD SysTime) $(TD -) $(TD Duration) $(TD -->) $(TD SysTime))
6304+
$(TR $(TD Duration) $(TD +) $(TD SysTime) $(TD -->) $(TD SysTime))
63046305
)
63056306

63066307
Params:
@@ -6316,6 +6317,13 @@ public:
63166317
return retval;
63176318
}
63186319

6320+
/// ditto
6321+
SysTime opBinaryRight(string op)(Duration duration) const @safe pure nothrow
6322+
if (op == "+")
6323+
{
6324+
return this + duration;
6325+
}
6326+
63196327
///
63206328
@safe unittest
63216329
{
@@ -6333,6 +6341,9 @@ public:
63336341

63346342
assert(SysTime(DateTime(2016, 1, 1, 0, 59, 59)) - hours(1) ==
63356343
SysTime(DateTime(2015, 12, 31, 23, 59, 59)));
6344+
6345+
assert(SysTime(DateTime(2015, 12, 31, 23, 59, 59)) + seconds(1) ==
6346+
seconds(1) + SysTime(DateTime(2015, 12, 31, 23, 59, 59)));
63366347
}
63376348

63386349
@safe unittest

0 commit comments

Comments
 (0)