diff --git a/src/app/login/LoginComponent.ts b/src/app/login/LoginComponent.ts
index 1ffa8c3..53f6f98 100644
--- a/src/app/login/LoginComponent.ts
+++ b/src/app/login/LoginComponent.ts
@@ -318,24 +318,28 @@
                     this.sharedService.passwordToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays,
                         this.passwordExpireMessage, this.passwordMessage);
                 } else {
-                    if (this.accountNoOfDays === '1') {
-                        this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETOMORROW');
-                        this.accountMessage = '';
-                        this.accountNoOfDays = '';
-                    } else if (this.accountNoOfDays === '0') {
-                        this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETODAY');
-                        this.accountMessage = '';
-                        this.accountNoOfDays = '';
-                    } else {
-                        this.accountExpireMessage = this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRE');
-                        this.accountMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
-                    }
-                    this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
-                        this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+                    this.accountDaysCheck();
                 }
             }
         }
     }
+    /** To check account no.of days with 0 & 1 @public */
+    public accountDaysCheck(): void {
+        if (this.accountNoOfDays === '1') {
+            this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETOMORROW');
+            this.accountMessage = '';
+            this.accountNoOfDays = '';
+        } else if (this.accountNoOfDays === '0') {
+            this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRETODAY');
+            this.accountMessage = '';
+            this.accountNoOfDays = '';
+        } else {
+            this.accountExpireMessage = this.accountExpireMessage = this.translateService.instant('PAGE.LOGIN.ACCOUNTEXPIRE');
+            this.accountMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
+        }
+        this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
+            this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+    }
     /** To display account expiry Toaster with required data @public */
     public accountExpiryToaster(): void {
         if (!isNullOrUndefined(this.accountNoOfDays)) {
@@ -356,24 +360,28 @@
                     this.sharedService.accountToaster(this.lastLogin, this.failedAttempts,
                         this.accountNoOfDays, this.accountExpireMessage, this.accountMessage);
                 } else {
-                    if (this.passwordNoOfDays === '1') {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETOMORROW');
-                        this.passwordMessage = '';
-                        this.passwordNoOfDays = '';
-                    } else if (this.passwordNoOfDays === '0') {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETODAY');
-                        this.passwordMessage = '';
-                        this.passwordNoOfDays = '';
-                    } else {
-                        this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRE');
-                        this.passwordMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
-                    }
-                    this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
-                        this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+                    this.passwordDaysCheck();
                 }
             }
         }
     }
+    /** To check password no.of days with 0 & 1 @public */
+    public passwordDaysCheck(): void {
+        if (this.passwordNoOfDays === '1') {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETOMORROW');
+            this.passwordMessage = '';
+            this.passwordNoOfDays = '';
+        } else if (this.passwordNoOfDays === '0') {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRETODAY');
+            this.passwordMessage = '';
+            this.passwordNoOfDays = '';
+        } else {
+            this.passwordExpireMessage = this.translateService.instant('PAGE.LOGIN.PASSWORDEXPIRE');
+            this.passwordMessage = this.translateService.instant('PAGE.LOGIN.DAYS');
+        }
+        this.sharedService.showToaster(this.lastLogin, this.failedAttempts, this.passwordNoOfDays, this.accountNoOfDays,
+            this.passwordExpireMessage, this.accountExpireMessage, this.passwordMessage, this.accountMessage);
+    }
     /** To display password & account expiry Toaster with required data @public */
     public showToaster(): void {
         if (!isNullOrUndefined(this.accountNoOfDays) && !isNullOrUndefined(this.passwordNoOfDays)) {
diff --git a/src/services/SharedService.ts b/src/services/SharedService.ts
index 8abe1d2..ba805e6 100644
--- a/src/services/SharedService.ts
+++ b/src/services/SharedService.ts
@@ -191,8 +191,12 @@
         if (!isNullOrUndefined(date)) {
             const today: Date = new Date();
             const accountDate: Date = new Date(date);
-            return Math.floor((accountDate.getTime() -
-                today.getTime()) / this.epochTime1000 / this.epochTime60 / this.epochTime60 / this.epochTime24);
+            const toasterDate: number = (accountDate.getTime() -
+                today.getTime()) / this.epochTime1000 / this.epochTime60 / this.epochTime60 / this.epochTime24;
+            if (toasterDate >= 0 || toasterDate < 1) {
+                return Math.round(toasterDate);
+            }
+            return Math.floor(toasterDate);
         }
         return this.translateService.instant('N/A');
     }
