diff --git a/netbox/templates/account/profile.html b/netbox/templates/account/profile.html
index e5a2c3d78..f494df910 100644
--- a/netbox/templates/account/profile.html
+++ b/netbox/templates/account/profile.html
@@ -35,15 +35,7 @@
{% trans "Last Login" %} |
-
- {% if request.user.last_login %}
-
- {{ request.user.last_login|timesince }} {% trans "ago" %}
-
- {% else %}
- {{ ''|placeholder }}
- {% endif %}
- |
+ {{ request.user.last_login|isodatetime:"minutes"|placeholder }} |
{% trans "Superuser" %} |
diff --git a/netbox/templates/account/token.html b/netbox/templates/account/token.html
index fd6aa11e0..7001d6a14 100644
--- a/netbox/templates/account/token.html
+++ b/netbox/templates/account/token.html
@@ -49,16 +49,7 @@
{% trans "Last used" %} |
-
- {% if object.last_used %}
-
- {{ object.last_used|timesince }}
-
- {% trans "ago" %}
- {% else %}
- {{ ''|placeholder }}
- {% endif %}
- |
+ {{ object.last_used|isodatetime|placeholder }} |
{% trans "Allowed IPs" %} |
diff --git a/netbox/templates/extras/htmx/script_result.html b/netbox/templates/extras/htmx/script_result.html
index d36936daf..0545e2bd5 100644
--- a/netbox/templates/extras/htmx/script_result.html
+++ b/netbox/templates/extras/htmx/script_result.html
@@ -1,4 +1,3 @@
-{% load humanize %}
{% load helpers %}
{% load log_levels %}
{% load i18n %}
@@ -8,7 +7,7 @@
{% if job.started %}
{% trans "Started" %}: {{ job.started|isodatetime }}
{% elif job.scheduled %}
- {% trans "Scheduled for" %}: {{ job.scheduled|isodatetime }} ({{ job.scheduled|naturaltime }})
+ {% trans "Scheduled for" %}: {{ job.scheduled|isodatetime }}
{% else %}
{% trans "Created" %}: {{ job.created|isodatetime }}
{% endif %}
diff --git a/netbox/templates/generic/object.html b/netbox/templates/generic/object.html
index 0b9aca7ea..112368870 100644
--- a/netbox/templates/generic/object.html
+++ b/netbox/templates/generic/object.html
@@ -51,11 +51,7 @@ Context:
{% trans "Created" %} {{ object.created|isodatetime:"minutes" }}
{% if object.last_updated %}
·
- {% trans "Updated" %}
-
- {{ object.last_updated|timesince }}
-
- {% trans "ago" %}
+ {% trans "Updated" %} {{ object.last_updated|isodatetime:"minutes" }}
{% endif %}
{% endblock subtitle %}
diff --git a/netbox/templates/users/token.html b/netbox/templates/users/token.html
index d576c1811..968c1d421 100644
--- a/netbox/templates/users/token.html
+++ b/netbox/templates/users/token.html
@@ -1,6 +1,6 @@
{% extends 'generic/object.html' %}
-{% load i18n %}
{% load helpers %}
+{% load i18n %}
{% load render_table from django_tables2 %}
{% block title %}{% trans "Token" %} {{ object }}{% endblock %}
@@ -37,20 +37,11 @@
{% trans "Expires" %} |
- {{ object.expires|isodatetime }} |
+ {{ object.expires|isodatetime|placeholder }} |
{% trans "Last used" %} |
-
- {% if object.last_used %}
-
- {{ object.last_used|timesince }}
-
- {% trans "ago" %}
- {% else %}
- {{ ''|placeholder }}
- {% endif %}
- |
+ {{ object.last_used|isodatetime|placeholder }} |
{% trans "Allowed IPs" %} |
diff --git a/netbox/templates/users/user.html b/netbox/templates/users/user.html
index a408025c3..c708fb963 100644
--- a/netbox/templates/users/user.html
+++ b/netbox/templates/users/user.html
@@ -31,15 +31,7 @@
{% trans "Last Login" %} |
-
- {% if object.last_login %}
-
- {{ object.last_login|timesince }} {% trans "ago" %}
-
- {% else %}
- {{ ''|placeholder }}
- {% endif %}
- |
+ {{ object.last_login|isodatetime:"minutes"|placeholder }} |
{% trans "Active" %} |
diff --git a/netbox/utilities/templatetags/builtins/filters.py b/netbox/utilities/templatetags/builtins/filters.py
index 50c525543..842f7b14a 100644
--- a/netbox/utilities/templatetags/builtins/filters.py
+++ b/netbox/utilities/templatetags/builtins/filters.py
@@ -5,6 +5,7 @@ import re
import yaml
from django import template
from django.contrib.contenttypes.models import ContentType
+from django.contrib.humanize.templatetags.humanize import naturaltime
from django.utils.html import escape
from django.utils.safestring import mark_safe
from markdown import markdown
@@ -214,10 +215,12 @@ def render_yaml(value):
@register.filter()
def isodate(value):
if type(value) is datetime.date:
- return value.isoformat()
- if type(value) is datetime.datetime:
- return value.date().isoformat()
- return ''
+ text = value.isoformat()
+ elif type(value) is datetime.datetime:
+ text = value.date().isoformat()
+ else:
+ return ''
+ return mark_safe(f'{text}')
@register.filter()
@@ -232,5 +235,7 @@ def isotime(value, spec='seconds'):
@register.filter()
def isodatetime(value, spec='seconds'):
if type(value) is datetime.datetime:
- return f'{isodate(value)} {isotime(value, spec=spec)}'
- return ''
+ text = f'{isodate(value)} {isotime(value, spec=spec)}'
+ else:
+ return ''
+ return mark_safe(f'{text}')