A library aimed at adding in some relevant functionality as seen in moment.js that is missing in the System.DateTime construct
$ dotnet add package moment.netThis library aims to port as many bits of functionality from moment.js as necessary. Currently supported features include:
FromNow, From, ToNow, To, StartOf, EndOf, and CalendarTime. Additional functionalities not present in moment.js are also being added.
Install Moment.net via NuGet:
PM > Install-Package moment.net
> dotnet add package moment.net
<PackageReference Include="moment.net" />
var dateTime = new DateTime(2017, 1, 1);
var relativeTime = dateTime.FromNow(); // 2 years ago
var past = new DateTime(2017, 1, 1);
var future = new DateTime(2020, 1, 1);
var relativeTime = past.From(future); // 3 years ago
var dateTime = new DateTime(2020, 1, 1);
var relativeTime = dateTime.ToNow(); // in one year
var past = new DateTime(2019, 1, 1);
var future = new DateTime(2021, 1, 1);
var relativeTime = past.To(future); // in 2 years
var date = DateTime.Parse("5/1/2008 8:30:52 AM", System.Globalization.CultureInfo.InvariantCulture);
var startOfDay = date.StartOf(DateTimeAnchor.Day); // 01/05/2008 00:00:00
var date = DateTime.Parse("5/1/2008 8:30:52 AM", System.Globalization.CultureInfo.InvariantCulture);
var endOfDay = date.EndOf(DateTimeAnchor.Day); // 01/05/2008 23:59:59
var startDateTime = new DateTime(2012, 12, 12);
var sameDay = new DateTime(2012, 12, 12, 12, 0, 0);
var calendarTime = startDateTime.CalendarTime(sameDay); // Today at 12:00 PM
var dateTime = new DateTime(1971, 01, 01, 0, 0, 0, DateTimeKind.Utc);
var millisecondsElapsed = dateTime.UnixTimestampInMilliseconds(); // 31536000000
date.FirstDateInWeek(); // 27/04/2008 00:00:00 (previous month)
date.LastDateInWeek(); // 03/05/2008 00:00:00
var date = DateTime.Parse("5/1/2008 8:30:52 AM", System.Globalization.CultureInfo.InvariantCulture);
date.Next(DayOfWeek.Thursday); // 08/05/2008 08:30:52
var date = DateTime.Parse("5/1/2008 8:30:52 AM", System.Globalization.CultureInfo.InvariantCulture);
date.Last(DayOfWeek.Friday); // 25/04/2008 08:30:52
var date = DateTime.Parse("5/1/2008 8:30:52 AM", System.Globalization.CultureInfo.InvariantCulture);
date.Final().Monday().InMonth(); // 26/05/2008 00:00:00
var dateTime = new DateTime(1971, 01, 01, 0, 0, 0, DateTimeKind.Utc);
date.Format("yyyy MMM dd"); // 1971 Jan 01
var dateTime = DateTime.Parse("1992-02-01");
dateTime.IsLeapYear(); // True
var dateTime = DateTime.Parse("2023-10-20");
dateTime.IsBusinessDay(); // True (Friday)
var dateTime = DateTime.Parse("2023-10-21");
dateTime.IsWeekend(); // True (Saturday)
var dateTime = DateTime.Parse("2023-10-23");
dateTime.IsWeekday(); // True (Monday)
var date = DateTime.Parse("2023-10-23");
var start = DateTime.Parse("2023-10-20");
var end = DateTime.Parse("2023-10-25");
date.IsBetween(start, end); // True
var date = DateTime.Parse("2023-10-25");
var otherDate = DateTime.Parse("2023-10-23");
date.DiffInDays(otherDate); // 2.0
var date = DateTime.Parse("2023-11-23");
var otherDate = DateTime.Parse("2023-10-23");
date.DiffInMonths(otherDate); // 1.0
var date = DateTime.Parse("2024-10-23");
var otherDate = DateTime.Parse("2023-10-23");
date.DiffInYears(otherDate); // 1.0
var dateTime = DateTime.Parse("2023-10-20");
dateTime.AddBusinessDays(2); // 2023-10-24 (skips weekend)
var dateTime = new DateTime(2017, 1, 1);
var relativeTime = dateTime.FromNow(new CultureInfo("es")); // 6 años atrás
Currently supported languages: English, Spanish, French, Portuguese.
Want to add more languages? Simply create a String.[language identifier].resx file and follow the Strings.es.resx example.
This project is licensed under the MIT License - see the LICENSE file for details.