显示日期作为日期时间输入

时间:2014-03-26 15:50:16

标签: javascript html5 google-chrome datetime

我的问题是:chromes datetime-local以我的操作系统配置方式显示(目前dd / mm / yyyy hh:ss)(24小时制)(en-US)

我想出了以同样方式显示日期的最佳方式。是用readonly和没有边框输入,但这不是最佳的。我需要在变量(字符串)中使用它并能够保存它并且可能发送具有相同格式的电子邮件(仅作为示例)

最好的事情是使用Date.toLocalString();,但它仍然与系统或输入格式不同

从我的理解和发现

  • Date.toLocalString基于地理位置
  • input[datetime-local]基于系统。
  • 系统格式有点不可能获得。

我不想更改输入的日期格式/掩码(因为客户不希望这样做) 但我会考虑将输入格式/掩码设置为与toLocalString相同的格式,以便在可能的情况下获得相同的行为???


enter image description here

http://plnkr.co/edit/nAfgdkPrFqjk6pyBjs8K?p=preview


但是现在当我们有datetime-local时,我们无法从输入字段中获取系统格式吗?

1 个答案:

答案 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)));