diff --git a/zircon/system/ulib/zx/include/lib/zx/time.h b/zircon/system/ulib/zx/include/lib/zx/time.h
index 7b7e25cda1f8688633f55c2fb7f60c06353bbb36..fdfcb6f34849a1810e516e287cf1e825edce3e14 100644
--- a/zircon/system/ulib/zx/include/lib/zx/time.h
+++ b/zircon/system/ulib/zx/include/lib/zx/time.h
@@ -234,6 +234,11 @@ private:
     zx_time_t value_ = 0;
 };
 
+template <zx_clock_t kClockId>
+constexpr basic_time<kClockId> operator+(duration delta, basic_time<kClockId> time) {
+    return time + delta;
+}
+
 using time = basic_time<ZX_CLOCK_MONOTONIC>;
 using time_utc = basic_time<ZX_CLOCK_UTC>;
 using time_thread = basic_time<ZX_CLOCK_THREAD>;
diff --git a/zircon/system/utest/libzx/zx-test.cpp b/zircon/system/utest/libzx/zx-test.cpp
index 54678575748f87a8efd9d4005d417ff97e217ff9..11cf79415aeff22f61b4b91a5856ff788d1ae6f4 100644
--- a/zircon/system/utest/libzx/zx-test.cpp
+++ b/zircon/system/utest/libzx/zx-test.cpp
@@ -285,6 +285,7 @@ static bool time_test() {
     ASSERT_EQ(zx::hour(10).to_hours(), 10);
 
     ASSERT_EQ((zx::time() + zx::usec(19)).get(), ZX_USEC(19));
+    ASSERT_EQ((zx::usec(19) + zx::time()).get(), ZX_USEC(19));
     ASSERT_EQ((zx::time::infinite() - zx::time()).get(), ZX_TIME_INFINITE);
     ASSERT_EQ((zx::time::infinite() - zx::time::infinite()).get(), 0);
     ASSERT_EQ((zx::time() + zx::duration::infinite()).get(), ZX_TIME_INFINITE);