Bootstrap DateTimePicker 和现有日期解析问题?
Bootstrap DateTimePicker and existing dates parsing issue?
有关版本的信息,使用 Bootstrap 3.0.0(如果我没记错的话内置在新的 MVC 模板中),Bootstrap-datetimejs 4.0.0(https://github.com/Eonasdan/bootstrap-datetimepicker ), 和 ASP.NET MVC 5.
使用 MVC,我呈现了一堆字段,但是这个字段有现有数据(这是在 Chrome 中检查元素时,所以它不是 HTMLHelper 代码):
<input class="form-control timepicker input-validation-error" data-format="hh:mm PP"
data-val="true" data-val-date="The field Start (Time) must be a date."
data-val-required="The Start (Time) field is required."
id="MaintenanceSundayTimeStart"
name="MaintenanceSundayTimeStart" type="text" value="1/1/2000 8:00:00 PM">
生成它的代码:
<div class="col-sm-4">
<div class="form-group">
@Html.LabelFor(model => model.MaintenanceSundayTimeStart)
@Html.TextBoxFor(model => model.MaintenanceSundayTimeStart,
new { @data_format = "hh:mm PP", @class = "form-control timepicker" })
</div>
</div>
当页面加载时,我称之为:
$('.timepicker').each(function () {
$(this).datetimepicker({
format: 'LT'
});
});
编辑:尝试过这个:
$('.timepicker').each(function () {
$(this).datetimepicker({
pickDate: false
});
});
并根据查看 moment.js 文档将数据格式设置为此,尽管斜杠和冒号不包括在内我假设它们可以被放入(以匹配 1/1 /2000 8:00:00 下午)
data-format="M/D/YYYY H:mm:ss A"
而且它似乎仍然无法解析日期时间。
出于某种原因,当控件呈现时,我在文本框中看到列出了完全不同的时间 (1:00 PM),这告诉我它可能无法解析出该值。我确实希望渲染只是 hour:minute AM/PM,但我认为我必须绑定到标准 DateTime 对象,对吧?查看源代码,似乎注入了输入验证错误,所以这可能是我提交表单时仅关注文本框的更大问题。
我是不是做错了什么?我知道我想接受一个 "mm/dd/YYYY hh:mm:ss PP" 并将其解析为只解析 "hh:mm PP" 部分。保存时,我真的只关心时间部分(我强制日期为 1/1/2000,因为我根本不关心日期部分)。
编辑:经过多次尝试,我注意到被解析的值(主要是通过转储其他值)是该值似乎将 MM 部分作为小时。输入将是一个完整的日期时间,但我只希望为用户提供要管理的时间组件(我将所有日期强制为 2000 年 1 月 1 日)。在这个阶段,我想如果我能完成那部分,我会很好。
看起来您实际上使用的是另一个不再积极开发的日期时间选择器 https://github.com/tarruda/bootstrap-datetimepicker,我建议切换到您实际链接到的版本。许多这些数据属性看起来与表单验证有关,并且也可能与您正在尝试做的事情发生冲突。我会建议使用 data-val="false" 直到你可以让选择器按预期工作,然后处理任何需要的验证。
如果您使用我的 Datetimepicker v4,您可以通过这样做轻松完成:
$('.timepicker').datetimepicker({
format: 'LT'
});
不需要额外的 data-
。
此外,作为额外奖励,您可以使用 EditorFor
模板来设置文本框。
https://gist.github.com/Eonasdan/1f6bd021319486e23777
Model.cs
using System.ComponentModel.DataAnnotations;
[DataType(DataType.Time)]
public DateTime Updated { get; set; }
Time.cshtml
//This file goes in /Shared/EditorTemplates/Time.cshtml
//You can easily do this for DataType.Date and DataType.DateTime
@{
var attributes = new Dictionary<string, object>();
attributes.Add("class", "form-control");
attributes.Add("type", "datetime");
}
<div class="input-group timepicker col-sm-3 col-md-3" id="@(ViewData.TemplateInfo.HtmlFieldPrefix)-timepicker">
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, attributes)
<span class="input-group-addon">
<span class="fa fa-clock-o"></span>
</span>
</div>
尝试对格式的小时部分使用小写 'h',例如:
$('.timepicker').each(function () {
$(this).datetimepicker({
format: 'format="M/D/YYYY h:mm:ss A"'
});
});
有关版本的信息,使用 Bootstrap 3.0.0(如果我没记错的话内置在新的 MVC 模板中),Bootstrap-datetimejs 4.0.0(https://github.com/Eonasdan/bootstrap-datetimepicker ), 和 ASP.NET MVC 5.
使用 MVC,我呈现了一堆字段,但是这个字段有现有数据(这是在 Chrome 中检查元素时,所以它不是 HTMLHelper 代码):
<input class="form-control timepicker input-validation-error" data-format="hh:mm PP"
data-val="true" data-val-date="The field Start (Time) must be a date."
data-val-required="The Start (Time) field is required."
id="MaintenanceSundayTimeStart"
name="MaintenanceSundayTimeStart" type="text" value="1/1/2000 8:00:00 PM">
生成它的代码:
<div class="col-sm-4">
<div class="form-group">
@Html.LabelFor(model => model.MaintenanceSundayTimeStart)
@Html.TextBoxFor(model => model.MaintenanceSundayTimeStart,
new { @data_format = "hh:mm PP", @class = "form-control timepicker" })
</div>
</div>
当页面加载时,我称之为:
$('.timepicker').each(function () {
$(this).datetimepicker({
format: 'LT'
});
});
编辑:尝试过这个:
$('.timepicker').each(function () {
$(this).datetimepicker({
pickDate: false
});
});
并根据查看 moment.js 文档将数据格式设置为此,尽管斜杠和冒号不包括在内我假设它们可以被放入(以匹配 1/1 /2000 8:00:00 下午)
data-format="M/D/YYYY H:mm:ss A"
而且它似乎仍然无法解析日期时间。
出于某种原因,当控件呈现时,我在文本框中看到列出了完全不同的时间 (1:00 PM),这告诉我它可能无法解析出该值。我确实希望渲染只是 hour:minute AM/PM,但我认为我必须绑定到标准 DateTime 对象,对吧?查看源代码,似乎注入了输入验证错误,所以这可能是我提交表单时仅关注文本框的更大问题。
我是不是做错了什么?我知道我想接受一个 "mm/dd/YYYY hh:mm:ss PP" 并将其解析为只解析 "hh:mm PP" 部分。保存时,我真的只关心时间部分(我强制日期为 1/1/2000,因为我根本不关心日期部分)。
编辑:经过多次尝试,我注意到被解析的值(主要是通过转储其他值)是该值似乎将 MM 部分作为小时。输入将是一个完整的日期时间,但我只希望为用户提供要管理的时间组件(我将所有日期强制为 2000 年 1 月 1 日)。在这个阶段,我想如果我能完成那部分,我会很好。
看起来您实际上使用的是另一个不再积极开发的日期时间选择器 https://github.com/tarruda/bootstrap-datetimepicker,我建议切换到您实际链接到的版本。许多这些数据属性看起来与表单验证有关,并且也可能与您正在尝试做的事情发生冲突。我会建议使用 data-val="false" 直到你可以让选择器按预期工作,然后处理任何需要的验证。
如果您使用我的 Datetimepicker v4,您可以通过这样做轻松完成:
$('.timepicker').datetimepicker({
format: 'LT'
});
不需要额外的 data-
。
此外,作为额外奖励,您可以使用 EditorFor
模板来设置文本框。
https://gist.github.com/Eonasdan/1f6bd021319486e23777
Model.cs
using System.ComponentModel.DataAnnotations;
[DataType(DataType.Time)]
public DateTime Updated { get; set; }
Time.cshtml
//This file goes in /Shared/EditorTemplates/Time.cshtml
//You can easily do this for DataType.Date and DataType.DateTime
@{
var attributes = new Dictionary<string, object>();
attributes.Add("class", "form-control");
attributes.Add("type", "datetime");
}
<div class="input-group timepicker col-sm-3 col-md-3" id="@(ViewData.TemplateInfo.HtmlFieldPrefix)-timepicker">
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, attributes)
<span class="input-group-addon">
<span class="fa fa-clock-o"></span>
</span>
</div>
尝试对格式的小时部分使用小写 'h',例如:
$('.timepicker').each(function () {
$(this).datetimepicker({
format: 'format="M/D/YYYY h:mm:ss A"'
});
});