我使用数据库中的UTC日期/时间值填充隐藏字段。然后我使用一些jQuery和时刻库将UTC日期转换为本地时间并设置eonasdan-datetimepicker的默认日期。我还使用eonasdan-datetimepicker的dp.change事件将通过窗口小部件选择的日期转换回UTC,以通过隐藏字段绑定回数据库。这是我的javascript - 这有效,但我不喜欢它。
$(".datepicker").each(function (index) {
var utcDateTime = moment.utc($("#" + $(this).data("utc-target")).val(), "MM/DD/YYYY h:mm A");
var localDateTime = moment.utc(utcDateTime).local().format("MM/DD/YYYY h:mm A");
$(this).find(">:first-child").val(localDateTime);
}).datetimepicker({
useCurrent: false,
}).on("dp.change", function (e) {
$("#" + $(this).data("utc-target")).val(moment.utc(e.date).format("MM/DD/YYYY h:mm A"));
});
HTML:
<label for="PublishedField">Date/Time Published</label>
<div class="input-group date datepicker" data-utc-target="PublishedUtcField">
<input name="PublishedField" type="text" id="PublishedField" class="form-control" />
<span class="input-group-addon"><span class="fa fa-calendar"> </span></span>
</div>
<input type="hidden" name="PublishedUtcField" id="PublishedUtcField" value="4/10/2015 5:16:00 PM" />
虽然这有效,但我不是每个循环的粉丝来设置datetimepicker的初始值。我觉得通过defaultDate属性设置它会更干净,但是我无法使用匿名函数设置该属性。我认为dp.initialize或dp.setup事件将是一个很好的解决方案,但据我所知,该库不支持这样的东西。这也可以使用某种占位符功能来完成,但我在文档或GitHub上找不到任何类似的场景。
有人知道更好的方法吗?是否以某种方式支持这种情况,我只是没有看到或意识到这种情况?我错过了一些明显的东西吗?