diff --git a/src/datepicker/datepicker.js b/src/datepicker/datepicker.js
index 599f3c3562..b0a3b932a1 100644
--- a/src/datepicker/datepicker.js
+++ b/src/datepicker/datepicker.js
@@ -368,7 +368,7 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
         if (!viewValue) {
           ngModel.$setValidity('date', true);
           return null;
-        } else if (angular.isDate(viewValue)) {
+        } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
           ngModel.$setValidity('date', true);
           return viewValue;
         } else if (angular.isString(viewValue)) {
diff --git a/src/datepicker/test/datepicker.spec.js b/src/datepicker/test/datepicker.spec.js
index 9ecec1c69c..575dae700c 100644
--- a/src/datepicker/test/datepicker.spec.js
+++ b/src/datepicker/test/datepicker.spec.js
@@ -248,6 +248,15 @@ describe('datepicker directive', function () {
           testCalendar();
           expect(angular.isDate($rootScope.date)).toBe(true);
         });
+
+        it('to a date that is invalid, it gets invalid', function() {
+          $rootScope.date = new Date('pizza');
+          $rootScope.$digest();
+          expect(element.hasClass('ng-invalid')).toBeTruthy();
+          expect(element.hasClass('ng-invalid-date')).toBeTruthy();
+          expect(angular.isDate($rootScope.date)).toBe(true);
+          expect(isNaN($rootScope.date)).toBe(true);
+        });
       });
 
       describe('not to a Date object', function() {