MVC视图中如何将@DateTime.UtcNow秒数设为0适配datetime-local
解决方案
一、让@DateTime.UtcNow默认秒数为00
问题出在你使用的格式字符串不符合datetime-local输入框的要求,该输入框只接受ISO 8601格式(yyyy-MM-ddTHH:mm:ss或yyyy-MM-ddTHH:mm)。你需要先截断当前时间的秒和毫秒,再输出正确格式的字符串:
<dt>Start Date (UTC)</dt> <input type="datetime-local" id="startDate" name="startDate" @* 截断秒和毫秒,输出带00秒的标准格式 *@ value="@DateTime.UtcNow.AddSeconds(-DateTime.UtcNow.Second).AddMilliseconds(-DateTime.UtcNow.Millisecond).ToString("yyyy-MM-ddTHH:mm:ss")" min="2023-06-07T00:00:00" max="2099-06-14T23:59:59" />
也可以简化格式为yyyy-MM-ddTHH:mm(省略秒,输入框会自动补00),代码如下:
value="@DateTime.UtcNow.AddSeconds(-DateTime.UtcNow.Second).AddMilliseconds(-DateTime.UtcNow.Millisecond).ToString("yyyy-MM-ddTHH:mm")"
二、允许输入非0秒的时间
输入框提示无效的原因主要有3种,对应解决方法如下:
1. 修正min/max属性格式
你当前的min和max只定义到分钟(2023-06-07T00:00),部分浏览器会默认限制秒数必须为00。将其修改为带秒的完整格式,并扩展max到当天最后一秒:
min="2023-06-07T00:00:00" max="2099-06-14T23:59:59"
2. 检查Model验证规则
如果你的Model中对应字段有格式限制,会导致后台验证不通过:
- 若使用
DisplayFormat,修改为允许秒的格式:[DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH:mm:ss}", ApplyFormatInEditMode = true)] public DateTime StartDate { get; set; } - 若使用正则验证,更新正则表达式以接受带秒的时间:
[RegularExpression(@"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?$", ErrorMessage = "Please enter a valid date and time")]
3. 检查step属性
如果输入框设置了step="60",会强制只能选择整分钟(秒为00)。若要允许秒级输入,移除该属性(默认step=1)或显式设置:
step="1"
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

