diff --git a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor index 34780aa0..249ea3b7 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor @@ -56,7 +56,7 @@
- +
@@ -69,7 +69,7 @@
- +
@@ -82,7 +82,7 @@
- +
@@ -97,22 +97,22 @@ @code { - private ElementReference form; - private bool validated = false; - private int _jobId; - private string _name = string.Empty; - private string _jobType = string.Empty; - private string _isEnabled = "True"; - private string _interval = string.Empty; - private string _frequency = string.Empty; - private DateTime? _startDate = null; - private string _startTime = string.Empty; - private DateTime? _endDate = null; - private string _endTime = string.Empty; - private string _retentionHistory = string.Empty; - private DateTime? _nextDate = null; - private string _nextTime = string.Empty; - private string createdby; + private ElementReference form; + private bool validated = false; + private int _jobId; + private string _name = string.Empty; + private string _jobType = string.Empty; + private string _isEnabled = "True"; + private string _interval = string.Empty; + private string _frequency = string.Empty; + private DateTime? _startDate = null; + private DateTime? _startTime = null; + private DateTime? _endDate = null; + private DateTime? _endTime = null; + private string _retentionHistory = string.Empty; + private DateTime? _nextDate = null; + private DateTime? _nextTime = null; + private string createdby; private DateTime createdon; private string modifiedby; private DateTime modifiedon; @@ -132,11 +132,14 @@ _isEnabled = job.IsEnabled.ToString(); _interval = job.Interval.ToString(); _frequency = job.Frequency; - (_startDate, _startTime) = Utilities.UtcAsLocalDateAndTime(job.StartDate); - (_endDate, _endTime) = Utilities.UtcAsLocalDateAndTime(job.EndDate); - _retentionHistory = job.RetentionHistory.ToString(); - (_nextDate, _nextTime) = Utilities.UtcAsLocalDateAndTime(job.NextExecution); - createdby = job.CreatedBy; + _startDate = Utilities.UtcAsLocalDateAndTimeToDate(job.StartDate); + _startTime = Utilities.UtcAsLocalDateAndTimeToTime(job.StartDate); + _endDate = Utilities.UtcAsLocalDateAndTimeToDate(job.EndDate); + _endTime = Utilities.UtcAsLocalDateAndTimeToTime(job.EndDate); + _retentionHistory = job.RetentionHistory.ToString(); + _nextDate = Utilities.UtcAsLocalDateAndTimeToDate(job.NextExecution); + _nextTime = Utilities.UtcAsLocalDateAndTimeToTime(job.NextExecution); + createdby = job.CreatedBy; createdon = job.CreatedOn; modifiedby = job.ModifiedBy; modifiedon = job.ModifiedOn; diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index cdf0e05e..febff300 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -490,17 +490,21 @@ namespace Oqtane.Shared return $"[{@class.GetType()}] {message}"; } - public static DateTime? LocalDateAndTimeAsUtc(DateTime? date, string time, TimeZoneInfo localTimeZone = null) + public static DateTime? LocalDateAndTimeAsUtc(DateTime? date, DateTime? time, TimeZoneInfo localTimeZone = null) { localTimeZone ??= TimeZoneInfo.Local; + if (date != null) { - if (!string.IsNullOrEmpty(time)) + if (time != null) { - return TimeZoneInfo.ConvertTime(DateTime.Parse(date.Value.Date.ToShortDateString() + " " + time), localTimeZone, TimeZoneInfo.Utc); + DateTime localDateTime = date.Value.Date.Add(time.Value.TimeOfDay); + return TimeZoneInfo.ConvertTimeToUtc(localDateTime, localTimeZone); } - return TimeZoneInfo.ConvertTime(date.Value.Date, localTimeZone, TimeZoneInfo.Utc); + + return TimeZoneInfo.ConvertTimeToUtc(date.Value.Date, localTimeZone); } + return null; } @@ -534,6 +538,49 @@ namespace Oqtane.Shared return (localDateTime?.Date, localTime); } + public static DateTime? LocalDateAndTimeAsUtc(DateTime? date, string time, TimeZoneInfo localTimeZone = null) + { + localTimeZone ??= TimeZoneInfo.Local; + if (date != null) + { + if (!string.IsNullOrEmpty(time)) + { + return TimeZoneInfo.ConvertTime(DateTime.Parse(date.Value.Date.ToShortDateString() + " " + time), localTimeZone, TimeZoneInfo.Utc); + } + return TimeZoneInfo.ConvertTime(date.Value.Date, localTimeZone, TimeZoneInfo.Utc); + } + return null; + } + public static DateTime? UtcAsLocalDateAndTimeToDate(DateTime? dateTime, TimeZoneInfo timeZone = null) + { + var result = UtcAsLocalDateAndTime(dateTime, timeZone); + return result.date; + } + + public static DateTime? UtcAsLocalDateAndTimeToTime(DateTime? dateTime, TimeZoneInfo timeZone = null) + { + var result = UtcAsLocalDateAndTime(dateTime, timeZone); + + if (string.IsNullOrEmpty(result.time)) + { + return result.date; + } + else + { + var timeParts = result.time.Split(':'); + if (timeParts.Length == 2 && int.TryParse(timeParts[0], out int hours) && int.TryParse(timeParts[1], out int minutes)) + { + TimeSpan timeOfDay = new TimeSpan(hours, minutes, 0); + return result.date?.Date + timeOfDay; + } + else + { + // Handle parsing error + return null; + } + } + } + [Obsolete("ContentUrl(Alias alias, int fileId) is deprecated. Use FileUrl(Alias alias, int fileId) instead.", false)] public static string ContentUrl(Alias alias, int fileId) {