diff --git a/platform/forms/res/templates/controls/datetime.html b/platform/forms/res/templates/controls/datetime.html
index e2accf7c8f..6dae89eb8a 100644
--- a/platform/forms/res/templates/controls/datetime.html
+++ b/platform/forms/res/templates/controls/datetime.html
@@ -38,7 +38,7 @@
placeholder="YYYY-DDD"
ng-pattern="/\d\d\d\d-\d\d\d/"
ng-model='datetime.date'
- ng-required='true'/>
+ ng-required='ngRequired || partiallyComplete'/>
+ ng-required='ngRequired || partiallyComplete'/>
+ ng-required='ngRequired || partiallyComplete'/>
+ ng-required='ngRequired || partiallyComplete'/>
UTC
diff --git a/platform/forms/src/controllers/DateTimeController.js b/platform/forms/src/controllers/DateTimeController.js
index bf122c3f9c..530c966380 100644
--- a/platform/forms/src/controllers/DateTimeController.js
+++ b/platform/forms/src/controllers/DateTimeController.js
@@ -52,6 +52,20 @@ define(
if (fullDateTime.isValid()) {
$scope.ngModel[$scope.field] = fullDateTime.valueOf();
}
+
+ // If anything is complete, say so in scope; there are
+ // ng-required usages that will update off of this (to
+ // allow datetime to be optional while still permitting
+ // incomplete input)
+ $scope.partiallyComplete =
+ Object.keys($scope.datetime).some(function (key) {
+ return $scope.datetime[key];
+ });
+
+ // Treat empty input as an undefined value
+ if (!$scope.partiallyComplete) {
+ $scope.ngModel[$scope.field] = undefined;
+ }
}
// Update value whenever any field changes.