Files
SPT-Server-Build/Libraries/SPTarkov.Server.Core/Extensions/DateTimeExtensions.cs
T
Chomp e6b791179b Added Boss of the week system
Similar to live where a boss is picked at random and will have a guaranteed spawn on a map. This is indicated with a skull on the map selection screen
Configurable via `config/bot.json/weeklyBoss`
2025-06-29 18:58:23 +01:00

129 lines
5.0 KiB
C#

namespace SPTarkov.Server.Core.Extensions
{
public static class DateTimeExtensions
{
/// <summary>
/// Formats the time part of a date as a UTC string.
/// </summary>
/// <param name="dateTimeOffset">The date to format in UTC.</param>
/// <returns>The formatted time as 'HH-MM-SS'.</returns>
public static string FormatToBsgTime(this DateTimeOffset dateTimeOffset)
{
var universalTime = dateTimeOffset.ToUniversalTime();
var hour = Pad(universalTime.Hour);
var minute = Pad(universalTime.Minute);
var second = Pad(universalTime.Second);
return $"{hour}-{minute}-{second}";
}
/// <summary>
/// Formats the time part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted time as 'HH-MM-SS'.</returns>
public static string FormatToBsgTime(this DateTime dateTime)
{
var universalTime = dateTime.ToUniversalTime();
var hour = Pad(universalTime.Hour);
var minute = Pad(universalTime.Minute);
var second = Pad(universalTime.Second);
return $"{hour}-{minute}-{second}";
}
/// <summary>
/// Formats the date part of a date as a UTC string.
/// </summary>
/// <param name="dateTimeOffset">The date to format in UTC.</param>
/// <returns>The formatted date as 'YYYY-MM-DD'.</returns>
public static string FormatToBsgDate(this DateTimeOffset dateTimeOffset)
{
var universalTime = dateTimeOffset.ToUniversalTime();
var day = Pad(universalTime.Day);
var month = Pad(universalTime.Month);
var year = Pad(universalTime.Year);
return $"{year}-{month}-{day}";
}
/// <summary>
/// Formats the date part of a date as a UTC string.
/// </summary>
/// <param name="dateTime">The date to format in UTC.</param>
/// <returns>The formatted date as 'YYYY-MM-DD'.</returns>
public static string FormatToBsgDate(this DateTime dateTime)
{
var universalTime = dateTime.ToUniversalTime();
var day = Pad(universalTime.Day);
var month = Pad(universalTime.Month);
var year = Pad(universalTime.Year);
return $"{year}-{month}-{day}";
}
/// <summary>
/// Pads a number with a leading zero if it is less than 10.
/// </summary>
/// <param name="number">The number to pad.</param>
/// <returns>The padded number as a string.</returns>
private static string Pad(int number)
{
return number.ToString().PadLeft(2, '0');
}
/// <summary>
/// Get current time formatted to fit BSGs requirement
/// </summary>
/// <param name="date"> Date to format into bsg style </param>
/// <returns> Time formatted in BSG format </returns>
public static string GetBsgFormattedWeatherTime(this DateTime date)
{
return date.FormatToBsgTime().Replace("-", ":").Replace("-", ":");
}
/// <summary>
/// Does the provided date fit between the two defined dates?
/// Excludes year
/// Inclusive of end date up to 23 hours 59 minutes
/// </summary>
/// <param name="dateToCheck">Date to check is between 2 dates</param>
/// <param name="startMonth">Lower bound for month</param>
/// <param name="startDay">Lower bound for day</param>
/// <param name="endMonth">Upper bound for month</param>
/// <param name="endDay">Upper bound for day</param>
/// <returns>True when inside date range</returns>
public static bool DateIsBetweenTwoDates(
this DateTime dateToCheck,
int startMonth,
int startDay,
int endMonth,
int endDay
)
{
var eventStartDate = new DateTime(dateToCheck.Year, startMonth, startDay);
var eventEndDate = new DateTime(dateToCheck.Year, endMonth, endDay, 23, 59, 0);
return dateToCheck >= eventStartDate && dateToCheck <= eventEndDate;
}
/// <summary>
/// Get the closest monday to passed in datetime
/// </summary>
/// <param name="dateTime">Date to get closest monday of</param>
/// <param name="startDay">Starting day of week - Default = Monday</param>
/// <returns>Monday as DateTime</returns>
public static DateTime GetStartOfWeek(
this DateTime dateTime,
DayOfWeek startDay = DayOfWeek.Monday
)
{
// Calculate difference from current day to Monday
var diff = (7 + (dateTime.DayOfWeek - startDay)) % 7;
// Subtract difference to get date of most recent Monday
return dateTime.AddDays(-1 * diff).Date;
}
}
}