diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java
index f3fc30fc4..a13ba3d35 100644
--- a/app/src/main/java/org/fdroid/fdroid/Utils.java
+++ b/app/src/main/java/org/fdroid/fdroid/Utils.java
@@ -32,6 +32,7 @@ import android.text.Html;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.TextUtils;
+import android.text.format.DateUtils;
 import android.text.style.CharacterStyle;
 import android.text.style.TypefaceSpan;
 import android.util.DisplayMetrics;
@@ -518,6 +519,26 @@ public final class Utils {
         return (int) TimeUnit.MILLISECONDS.toDays(msDiff);
     }
 
+    public static String formatLastUpdated(@NonNull Resources res, @NonNull Date date) {
+        long msDiff = Calendar.getInstance().getTimeInMillis() - date.getTime();
+        long days   = msDiff / DateUtils.DAY_IN_MILLIS;
+        long weeks  = msDiff / (DateUtils.DAY_IN_MILLIS * 7);
+        long months = msDiff / (DateUtils.DAY_IN_MILLIS * 30);
+        long years  = msDiff / (DateUtils.DAY_IN_MILLIS * 365);
+
+        if (days < 1) {
+            return res.getString(R.string.details_last_updated_today);
+        } else if (weeks < 1) {
+            return res.getQuantityString(R.plurals.details_last_update_days, (int) days, days);
+        } else if (months < 1) {
+            return res.getQuantityString(R.plurals.details_last_update_months, (int) months, months);
+        } else if (years < 1) {
+            return res.getQuantityString(R.plurals.details_last_update_weeks, (int) weeks, weeks);
+        } else {
+            return res.getQuantityString(R.plurals.details_last_update_years, (int) years, years);
+        }
+    }
+
     // Need this to add the unimplemented support for ordered and unordered
     // lists to Html.fromHtml().
     public static class HtmlTagHandler implements Html.TagHandler {
diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
index 640476fa7..72df5a4bf 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java
@@ -33,9 +33,11 @@ import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
+
 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 import com.nostra13.universalimageloader.core.ImageLoader;
 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
+
 import org.fdroid.fdroid.Preferences;
 import org.fdroid.fdroid.R;
 import org.fdroid.fdroid.Utils;
@@ -408,15 +410,8 @@ public class AppDetailsRecyclerViewAdapter
                 authorView.setVisibility(View.GONE);
             }
             if (app.lastUpdated != null) {
-                int daysSince = Utils.daysSince(app.lastUpdated);
-                String text;
-                Resources resources = lastUpdateView.getContext().getResources();
-                if (daysSince < 1) {
-                    text = resources.getString(R.string.details_last_updated_today);
-                } else {
-                    text = resources.getQuantityString(R.plurals.details_last_update_days, daysSince, daysSince);
-                }
-                lastUpdateView.setText(text);
+                Resources res = lastUpdateView.getContext().getResources();
+                lastUpdateView.setText(Utils.formatLastUpdated(res, app.lastUpdated));
                 lastUpdateView.setVisibility(View.VISIBLE);
             } else {
                 lastUpdateView.setVisibility(View.GONE);
diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/WhatsNewViewBinder.java b/app/src/main/java/org/fdroid/fdroid/views/main/WhatsNewViewBinder.java
index e73626468..23eee3817 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/main/WhatsNewViewBinder.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/main/WhatsNewViewBinder.java
@@ -1,7 +1,6 @@
 package org.fdroid.fdroid.views.main;
 
 import android.content.Intent;
-import android.content.res.Resources;
 import android.database.Cursor;
 import android.os.Bundle;
 import android.support.design.widget.FloatingActionButton;
@@ -15,6 +14,7 @@ import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.widget.FrameLayout;
 import android.widget.TextView;
+
 import org.fdroid.fdroid.R;
 import org.fdroid.fdroid.UpdateService;
 import org.fdroid.fdroid.Utils;
@@ -122,15 +122,7 @@ class WhatsNewViewBinder implements LoaderManager.LoaderCallbacks<Cursor> {
             if (lastUpdate == null) {
                 emptyStateText.append(activity.getString(R.string.latest__empty_state__never_updated));
             } else {
-                int daysSince = Utils.daysSince(lastUpdate);
-                Resources resources = activity.getResources();
-                String text;
-                if (daysSince < 1) {
-                    text = resources.getString(R.string.details_last_updated_today);
-                } else {
-                    text = resources.getQuantityString(R.plurals.details_last_update_days, daysSince, daysSince);
-                }
-                emptyStateText.append(text);
+                emptyStateText.append(Utils.formatLastUpdated(activity.getResources(), lastUpdate));
             }
         }
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8e89e5709..0e828a8fc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -554,4 +554,16 @@
         <item quantity="one">Updated %1$s day ago</item>
         <item quantity="other">Updated %1$s days ago</item>
     </plurals>
+    <plurals name="details_last_update_weeks">
+        <item quantity="one">Updated %1$s week ago</item>
+        <item quantity="other">Updated %1$s weeks ago</item>
+    </plurals>
+    <plurals name="details_last_update_months">
+        <item quantity="one">Updated %1$s month ago</item>
+        <item quantity="other">Updated %1$s months ago</item>
+    </plurals>
+    <plurals name="details_last_update_years">
+        <item quantity="one">Updated %1$s year ago</item>
+        <item quantity="other">Updated %1$s years ago</item>
+    </plurals>
 </resources>