【问题标题】:Knockout.js input type date data binding in Google ChromeGoogle Chrome 中的 Knockout.js 输入类型日期数据绑定
【发布时间】:2013-05-10 10:51:17
【问题描述】:

我正在努力为谷歌浏览器中type="date" 的输入设置一个值:http://jsfiddle.net/ruslans/gNv7H/

<input data-bind="value: dateString" type="date"></input>

var viewModel = {
    someDate: new Date(parseInt("/Date(1367708400000)/".substr(6)))
};
ko.applyBindings(viewModel);

我的日期将来自 JSON 数据,但首先我需要找出 Chrome 的日期选择器需要采用哪种格式才能识别绑定。我是否必须使用 jQuery 选择器并在字段上设置.val()?看起来很蠢……

编辑:根据this article,设置谷歌日期输入值的日期格式必须始终为"yyyy-mm-dd"。这是一个遗憾,因为我们对所有没有本地日期选择器的浏览器都使用 jQuery 日期选择器。

【问题讨论】:

  • 请注意,根据W3 standard draft,这不是特定于chrome的,但每个浏览器都将/应该像这样实现:“yyyy-mm-dd”日期格式。由于您可以将 jQuery 日期选择器配置为使用这种格式,所以我看不到您的问题...
  • 显示的日期格式将是特定于租户的。例如。 mm/dd/yyyy 代表美国,mm.dd.yyyy 代表俄罗斯,dd/mm/yyyy 代表英国等。但是,在源代码中,它始终是 JSON 日期格式。
  • 因此您可以在模型/源中以任何格式设置日期。然后,您需要在设置输入值时将其转换为“yyyy-mm-dd”。您可以设置 jQuery 以使用这种“yyyy-mm-dd”格式来存储数据。您需要设置 jQuery 和 chrome 原生日期选择器,以便以任何目标格式显示它。因此,您最终将获得三种格式:源、输入格式、显示格式。我在这里没有看到问题,这就是当你必须处理日期时这些东西是如何工作的。

标签: javascript jquery html google-chrome knockout.js


【解决方案1】:

您只需要按照W3C working draft 中的说明正确格式化您的value

RFC 3339 中定义的有效完整日期,附加条件是年份部分为四位或更多位,表示大于 0 的数字。

示例: 1996-12-19

所以以下应该可以工作:

var viewModel = {    
    dateString: ko.observable('2002-02-02')
};

演示JSFiddle.

【讨论】:

  • 感谢您的回答,您能否告诉我有关如何在不使用计算变量的情况下使用 knockout.js 进行 html5 日期选择器(输入类型“日期”)的任何想法?就像在这里完成的那样:screencast.com/t/pMtuSV6mxUf
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2012-08-26
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多