Philiprehberger.TimeAgo
0.1.9
dotnet add package Philiprehberger.TimeAgo --version 0.1.9
NuGet\Install-Package Philiprehberger.TimeAgo -Version 0.1.9
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Philiprehberger.TimeAgo" Version="0.1.9" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Philiprehberger.TimeAgo" Version="0.1.9" />
<PackageReference Include="Philiprehberger.TimeAgo" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Philiprehberger.TimeAgo --version 0.1.9
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Philiprehberger.TimeAgo, 0.1.9"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Philiprehberger.TimeAgo@0.1.9
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Philiprehberger.TimeAgo&version=0.1.9
#tool nuget:?package=Philiprehberger.TimeAgo&version=0.1.9
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Philiprehberger.TimeAgo
Convert timestamps into human-readable relative phrases like "3 hours ago" or "in 2 days".
Installation
dotnet add package Philiprehberger.TimeAgo
Usage
using Philiprehberger.TimeAgo;
var now = DateTimeOffset.UtcNow;
RelativeTime.From(now.AddSeconds(-10)); // "just now"
RelativeTime.From(now.AddMinutes(-1)); // "1 minute ago"
RelativeTime.From(now.AddMinutes(-45)); // "45 minutes ago"
RelativeTime.From(now.AddHours(-1)); // "1 hour ago"
RelativeTime.From(now.AddHours(-5)); // "5 hours ago"
RelativeTime.From(now.AddDays(-1)); // "yesterday"
RelativeTime.From(now.AddDays(-3)); // "3 days ago"
RelativeTime.From(now.AddDays(-10)); // "1 week ago"
RelativeTime.From(now.AddDays(-20)); // "3 weeks ago"
RelativeTime.From(now.AddMonths(-1)); // "1 month ago"
RelativeTime.From(now.AddMonths(-6)); // "6 months ago"
RelativeTime.From(now.AddYears(-1)); // "1 year ago"
RelativeTime.From(now.AddYears(-3)); // "3 years ago"
// Future
RelativeTime.From(now.AddMinutes(5)); // "in 5 minutes"
RelativeTime.From(now.AddDays(1)); // "tomorrow"
RelativeTime.From(now.AddMonths(2)); // "in 2 months"
// Custom reference time (useful for testing)
RelativeTime.From(timestamp, relativeTo: someFixedTime);
Different Time Ranges
using Philiprehberger.TimeAgo;
var now = DateTimeOffset.UtcNow;
RelativeTime.From(now.AddSeconds(-30)); // "just now"
RelativeTime.From(now.AddMinutes(-5)); // "5 minutes ago"
RelativeTime.From(now.AddHours(-3)); // "3 hours ago"
RelativeTime.From(now.AddDays(-1)); // "yesterday"
RelativeTime.From(now.AddDays(-14)); // "2 weeks ago"
RelativeTime.From(now.AddMonths(-6)); // "6 months ago"
RelativeTime.From(now.AddYears(-2)); // "2 years ago"
Custom Reference Time
using Philiprehberger.TimeAgo;
var reference = new DateTimeOffset(2026, 1, 1, 0, 0, 0, TimeSpan.Zero);
var timestamp = new DateTimeOffset(2025, 12, 25, 0, 0, 0, TimeSpan.Zero);
RelativeTime.From(timestamp, reference); // "last week"
API
RelativeTime
| Method | Description |
|---|---|
From(DateTimeOffset timestamp, DateTimeOffset? relativeTo = null) |
Return a relative phrase for timestamp; uses DateTimeOffset.UtcNow when relativeTo is omitted |
Thresholds:
| Delta | Phrase |
|---|---|
| < 30 s | "just now" |
| < 90 s | "1 minute ago" |
| < 60 min | "X minutes ago" |
| < 1.5 h | "1 hour ago" |
| < 24 h | "X hours ago" |
| < 1.5 d | "yesterday" |
| < 7 d | "X days ago" |
| < 14 d | "1 week ago" |
| < 30 d | "X weeks ago" |
| < 45 d | "1 month ago" |
| < 365 d | "X months ago" |
| < 545 d | "1 year ago" |
| ≥ 545 d | "X years ago" |
Future phrases follow the same thresholds with "in …" and "tomorrow" in place of "yesterday".
Development
dotnet build src/Philiprehberger.TimeAgo.csproj --configuration Release
Support
If you find this project useful:
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.