ASP.NET Core Razor Pages日期选择器的时间格式适配问题
问题描述
在ASP.NET Core Razor Pages应用中,我通过以下AJAX代码从服务器获取DateTime值并设置到<input />元素中:
$.ajax({ type: 'GET', url: '?handler=InitProductTransfer', contentType: 'application/json', dataType: 'json', data: { 'sourceId': sourceId, 'sourceType': sourceType }, }) .done(function (response) { // Set timestamp var $timeStamp = $modal.find('#TimeStamp'); $timeStamp.val(response.timeStamp); // <====== ERROR HERE! }) .fail(function (response) { alert(response.responseText); });
当前遇到的问题是时间格式不正确,response.timeStamp的格式为2023-10-31T15:23:55.0038809,想知道JavaScript有没有内置函数可以将日期格式化为日期时间<input />元素所需的格式,还是必须手动转换为字符串?
解决方案
不需要手动拼接字符串,JavaScript可以通过Date对象结合原生方法快速处理:
- 适配
<input type="datetime-local" />的最简方案
这类输入框要求格式为YYYY-MM-DDTHH:mm:ss,直接用Date对象的toISOString()方法,再截取到秒的部分即可:
const date = new Date(response.timeStamp); // 截取到秒,得到符合要求的格式 const formattedDate = date.toISOString().slice(0, 19); $timeStamp.val(formattedDate);
- 自定义格式处理
如果需要其他格式(比如YYYY-MM-DD HH:mm:ss),可以提取日期的各个部分拼接:
const date = new Date(response.timeStamp); const year = date.getFullYear(); // 月份从0开始,要加1并补0 const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; $timeStamp.val(formattedDate);
- 后端提前格式化(可选)
也可以在ASP.NET Core后端直接返回指定格式的字符串,避免前端处理:
// 示例:在返回的模型中指定日期格式 public class TransferResponse { [JsonPropertyName("timeStamp")] public string TimeStamp => DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); } // 或者全局配置JSON序列化格式 builder.Services.AddRazorPages() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add( new JsonConverter<DateTime>( date => date.ToString("yyyy-MM-ddTHH:mm:ss"), str => DateTime.Parse(str) ) ); });
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

