指定 HTML5 输入类型的值输出 = 日期?
Posted
技术标签:
【中文标题】指定 HTML5 输入类型的值输出 = 日期?【英文标题】:Specifying the value output of of an HTML5 input type = date? 【发布时间】:2011-03-30 14:27:17 【问题描述】:我想将本机日期选择器添加到我的应用程序中,该应用程序目前使用的是旧版的自制系统。日期输入支持尚未普及,但如果我可以基于兼容性提供这两种实现,那将是理想的。
有没有办法指定 html 日期选择器给出的值的输出? Opera 的默认值是yyyy-mm-dd
,我非常明确地需要dd-MMM-yyyy
。
目前有什么方法可以控制这个输出吗?
【问题讨论】:
不确定这是否真的是您想要的,但您可能会从中找到价值:flowplayer.org/tools/dateinput/index.html 输出值到底是什么意思。 值值还是显示值? 【参考方案1】:HTML 日期字段的格式是标准的。虽然无法更改此设置,但您可以轻松地将日期对象转换为您正在寻找的格式,因为您的用户启用了 javascript。
// Converts any valid Date string or Date object into the format dd-MMM-yyyy
function dateTransform(d)
var s = (new Date(d)).toString().split(' ');
return [s[2],s[1],s[3]].join('-');
否则,您需要以 ISO 格式提交并实施服务器端解决方案。也许随着时间的推移,这可能会导致在每个地方更多地使用标准日期格式。
【讨论】:
【参考方案2】:在 Google Chrome 中,这最近发生了变化。向用户显示的值现在基于操作系统区域设置。然而,无论演示格式如何,读数(即input.value
)始终返回为yyyy-mm-dd
。
在我看来更有用。
来源:
http://updates.html5rocks.com/2012/08/Quick-FAQs-on-input-type-date-in-Google-Chrome
【讨论】:
【参考方案3】:HTML5 date input 字段特定于它使用的格式: RFC 3339 full-date
是否可以将旧日期选择器更改为使用 yyyy-mm-dd 格式(并更新读取该格式的服务器端)?
我认为不是,因此您可以添加一些 Javascript 胶水代码来监听 HTML5 输入上的更改事件并更新隐藏的日期值字段以匹配旧日期选择器的格式(将 yyyy-mm-dd 转换为dd-MMM-yyyy)。
【讨论】:
dd-mmm-yyyy 甚至不是独立于语言环境的(假设 mmm 是“Jan”、“Feb”等)。所以如果您的 webapp/脚本需要这样的格式而不是不包含任何本地化字符串的符合标准的格式。 @ThiefMaster:对于整个应用程序中的每个日期输入都期望 03-FEB-2011 的用户将继续期望这种格式。 yyyy-mm-dd 对于美国公民(当时的客户是其中的)既不可读也不预期,如果只需要一个月和一天,或者一天和一小时,则格式完全无法使用。当存在约定时,约定在许多情况下胜过其他设计原则,以最大限度地提高可用性,尤其是在客户几乎没有流失的情况下。 也许时钟是圆形的而指针是顺时针方向移动的效率很低,但这仍然是它们的构造方式。惯例胜过设计,当一天有 24 小时时,我仍然只会在时钟上显示 12 小时,而“让我们在 6:30 见面”完全模棱两可。这是一个糟糕的根设计,但约定胜过其他可用性原则。由于技术有限和不足,我不会将日期时间(自纪元以来的毫秒数)字段永远放在面向用户的应用程序中。我会找到解决方法。这也不例外。 @ThiefMaster,多么愚蠢的评论,谁在争论输入。规范化它。 @StefanKendall 这与设计完全无关。我们在这里讨论的是代码,而不是用户看到的。在编程中,最合乎逻辑的日期格式,至少在 LTR 语言中,是从最大单位发展到最小单位。因此,该模式将是:“yyyy.mm.dd”(尽管分隔符是有争议的,一些流行的格式使用连字符“-”字符)。 ISO 8601 格式遵循此模式。作为一个标准,ISO 8601 IS 约定在这种情况下胜过设计。以上是关于指定 HTML5 输入类型的值输出 = 日期?的主要内容,如果未能解决你的问题,请参考以下文章
vbscript HTML5输入类型日期 - 为日期选择器指定默认值