当前位置: 首页 > 知识库问答 >
问题:

ngular.js和HTML5日期输入值-如何让Firefox在日期输入中显示可读的日期值?

华峰
2023-03-14

我有一个HTML5日期输入,我希望它的值在默认情况下设置为我的模型中的日期属性的值。我对格式化不太在意,因为Chrome似乎根据我的区域设置来决定对我来说,但是理想的格式应该是一致的dd/MM/yyyy

不停摆弄

这是我设置输入的方式:

<input type="date" 
       ng-model="date" 
       value="{{ date | date: 'yyyy-MM-dd' }}" />

这在Chrome上运行良好,默认情况下我看到以下内容:

(我仍然不太明白,如果Chrome仍然根据我的区域设置对其进行格式化,为什么必须在yyyy-MM-dd中给出该值,但这是另一个问题。)

我的问题是Firefox没有以我指定的方式显示日期值。我认为这与将输入绑定到date模型有关,因为我可以在value属性中指定几乎任何字符串,并且默认情况下,我仍然会在输入中看到长日期字符串:

如果我从输入标签中删除ng-model="date",Firefox会很好地显示我给它的任何值。我不认为输入绑定的模型实际上对其默认值有任何影响?

我知道日期输入不是普遍支持的,但是鉴于它应该依赖于一个简单的文本输入,我不明白为什么它的值不能简单地为2013-08-05,正如角的日期过滤器所指定的。

那么,如何让Firefox接受日期输入中的格式化值呢?

注意:在用户完成编辑后,我当然会执行验证,并将每个日期输入值转换为适当的日期对象。不确定这是否与问题相关,但把它放在那里以防万一,因为输入格式显然需要保持一致,以便日期转换在所有浏览器中都能正常工作。有问题,当然,Chrome为我决定输入格式...

共有3个答案

巫马淳
2023-03-14

你可以用这个,它工作正常:

<input type="date" class="form1"  
  value="{{date | date:MM/dd/yyyy}}"
  ng-model="date" 
  name="id" 
  validatedateformat 
  data-date-format="mm/dd/yyyy"
  maxlength="10" 
  id="id" 
  calendar 
  maxdate="todays"
  ng-click="openCalendar('id')">
    <span class="input-group-addon">
      <span class="glyphicon glyphicon-calendar" ng-click="openCalendar('id')"></span>
    </span>
</input>
陈奇希
2023-03-14

为什么值必须以yyyy-MM-dd给出?

根据HTML 5的输入类型=日期规范,该值必须采用yyyy-MM-dd格式,因为它采用RFC3339中指定的有效完整日期的格式

full-date = date-fullyear "-" date-month "-" date-mday

与Angularjs无关,因为指令输入不支持datetype。

如何让Firefox接受日期输入中的格式化值?

FF至少在24.0版本之前不支持date类型的输入。你可以从这里得到这些信息。所以现在,如果您在FF中使用类型为date的输入,文本框将接收您传入的任何值。

我的建议是,您可以使用AngularUI的时间选择器,而不使用HTML5支持的日期输入。

向锦
2023-03-14

问题在于,当存在ng model时,value被忽略。

Firefox目前不支持type="date",它将把所有的值转换为字符串。既然你(正确地)希望date是一个真正的Date对象,而不是一个字符串,我认为最好的选择是创建另一个变量,例如dateString,然后将两个变量链接起来:

<input type="date" ng-model="dateString" />
function MainCtrl($scope, dateFilter) {
    $scope.date = new Date();

    $scope.$watch('date', function (date)
    {
        $scope.dateString = dateFilter(date, 'yyyy-MM-dd');
    });

    $scope.$watch('dateString', function (dateString)
    {
        $scope.date = new Date(dateString);
    });
}

小提琴

实际结构仅用于演示目的。您最好创建自己的指令,尤其是为了:

  • 允许除yyyy-MM-dd,

请注意,我使用了yyyy-MM-dd,因为它是JavaScriptDate对象直接支持的格式。如果您想使用另一个,您必须自己进行转换。

编辑

以下是一种制定清洁指令的方法:

myModule.directive(
    'dateInput',
    function(dateFilter) {
        return {
            require: 'ngModel',
            template: '<input type="date"></input>',
            replace: true,
            link: function(scope, elm, attrs, ngModelCtrl) {
                ngModelCtrl.$formatters.unshift(function (modelValue) {
                    return dateFilter(modelValue, 'yyyy-MM-dd');
                });

                ngModelCtrl.$parsers.unshift(function(viewValue) {
                    return new Date(viewValue);
                });
            },
        };
});

小提琴

这是一个基本的指令,仍然有很大的改进空间,例如:

  • 允许使用自定义格式而不是yyyy-MM-dd
 类似资料:
  • 问题内容: 在用户更改日期之前,日期输入不会显示日期 jsbin中的示例代码 我需要它才能在稳定的1.2.14版本上工作。可能吗? 问题答案: 我创建了一个简单的指令,以使标准表单元素能够与AngularJS〜1.2.16一起正常工作。 请查看此处以获取详细信息:https : //github.com/betsol/angular-input-date 这是演示:http : //jsfiddl

  • 我有一个输入日期,在管理面板显示为,但在站点显示为。我如何使它在现场显示为DD-MM-YYYY?输入的HTML: php输入(wordpress管理面板)

  • 我创建了一个带有字段date_time的表,它的数据类型是datetime。 我正在使用PHP从这个表中获取记录,我想在超文本标记语言页面中显示这个日期和时间。 我正在设置它的value属性,但它不显示日期,是否需要执行任何转换以在HTML输入中显示此日期时间?

  • 我有一个问题,用PHP在输入字段中回响DateTime。现在,我无法在输入字段中回响所选的DateTime值。 下面是我的示例编码,我使用下面的方法无法回显所选值: 结果如下图所示: 这是我的在线工作示例代码:https://paiza.io/projects/D-J1uBPeHJuL8jCOhToRQQ 希望有人能指导我如何解决这个问题。谢谢。

  • 问题内容: 我正在使用Liferay 6.2,并想使用 liferay-ui:input-date 字段。现场本身工作正常。但是我想更改显示的日期格式 毫米/日/年 至 dd.mm.yyyy 但是该怎么做呢?我看不到有什么衣服可以设置这个… 问题答案: 我查看了输入日期标记库代码,如果要更改模式,则必须修改其代码。文件的路径:\ webapps \ ROOT \ html \ taglib \ u

  • 问题内容: 我有一个活动的编辑页面,我的一个字段是日期。在某些浏览器中,它看起来像纯文本框(IE8),但是在chrome中,它显示“ dd / mm / yyyy”,如果单击它,它还有一些其他选项可用于设置日期。 我的问题是在编辑页面上,它没有填充现有日期(我想是因为日期格式不正确?)。MVC控制器以“ 2014-03-08T00:00:00”格式返回数据(仅使用基本的CRUD控制器操作)。 我已