我的问题是:chromes datetime-local以我的操作系统配置方式显示(目前dd / mm / yyyy hh:ss)(24小时制)(en-US)
我想出了以同样方式显示日期的最佳方式。是用readonly和没有边框输入,但这不是最佳的。我需要在变量(字符串)中使用它并能够保存它并且可能发送具有相同格式的电子邮件(仅作为示例)
最好的事情是使用Date.toLocalString();
,但它仍然与系统或输入格式不同
从我的理解和发现
Date.toLocalString
基于地理位置input[datetime-local]
基于系统。我不想更改输入的日期格式/掩码(因为客户不希望这样做) 但我会考虑将输入格式/掩码设置为与toLocalString相同的格式,以便在可能的情况下获得相同的行为???
http://plnkr.co/edit/nAfgdkPrFqjk6pyBjs8K?p=preview
但是现在当我们有datetime-local
时,我们无法从输入字段中获取系统格式吗?
答案 0 :(得分:1)
(由于这显然是谷歌Chrome浏览器的问题,因此在同一背景下回答了问题)
Chrome(以及其他浏览器的最新版本)具有国际化JavaScript API。 它允许您格式化数字和日期,并根据当前(或任何支持的)区域设置比较字符串。
使用Intl.DateTimeFormatter
,您可以格式化输入日期(new Date(dateInputElement.valueAsNumber)
将为您提供原始日期对象) -
var formatter = new Intl.DateTimeFormat();
console.log(formatter.format(new Date(dateInputElement.valueAsNumber)));
您可以在构造时使用options对象配置DateTimeFormatter
-
var formatter = new Intl.DateTimeFormat((new Intl.DateTimeFormat).resolvedOptions().locale,{year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric"});
console.log(formatter.format(new Date(dateInputElement.valueAsNumber)));