     
     // MARK: - Properties
     
+    private let relativeDateFormatter: DateComponentsFormatter = {
+        let formatter = DateComponentsFormatter()
+        formatter.allowedUnits = [.month, .day, .hour, .minute]
+        formatter.formattingContext = .standalone
+        formatter.includesApproximationPhrase = true
+        formatter.maximumUnitCount = 1
+        formatter.unitsStyle = .full
+        return formatter
+    }()
+    
     private let absoluteDateFormatter: DateFormatter = {
         let formatter = DateFormatter()
         formatter.dateStyle = .long

            setText(markup: r.meaningMnemonic, to: meaningMnemonicLabel)
            
            setRelatedSubjects(ids: r.amalgamationSubjectIDs, title: "Found In Kanji")
        case let k as Kanji:
            navigationItem.title = k.characters
            removeSubviews(from: stackView, ifNotIn: visibleViewsForKanji)

                case .now:
                    nextReviewLabel.text = "Available Now"
                case let .date(date):
                    nextReviewLabel.text = relativeDateFormatter.string(from: date.timeIntervalSinceNow)
                }
            }
            
            if let unlockedAt = assignment.unlockedAt {
                unlockedDateLabel.text = absoluteDateFormatter.string(from: unlockedAt)
            }
        } else {
            reviewStatisticsViews.forEach { view in
