处理AngularJS / HTML5中的日期问题

时间:2016-08-18 22:28:00

标签: javascript angularjs html5 date

我在Angular JS中重写了一个旧的ASP.NET Web Forms应用程序,我在处理日期方面遇到了一些问题。

首先,HTML5有一个我想使用的新输入类型“日期”,但是,它必须总是有一个我认为是疏忽的值。当您要求用户填写信息并且相关日期是可选的时(例如尚未取消的合同的取消日期),这并不好。为了解决这个问题,我必须将输入类型更改为“text”并使用正则表达式来确保以正确的格式(MM / DD / YYYY)进行输入。

其次,在文本字段中显示日期值时,它始终采用UTC格式,这是不可取的。在绑定到日期类型的模型时,似乎没有办法更改文本框中显示的日期格式。

第三,当我调用“new Date(dateString)”并且dateString不包含时间部分时,我会假设时间默认为午夜而且确实如此,但它也会将时区信息附加到它,所以当我将这些数据发送到我的API并将其写入数据库时​​,它具有以下值:2016-08-18 07:00:00(我在山区时区,即GMT + 7)。我需要它存储为2016-08-18 00:00:00。

我尝试做的是使用$ watch函数,如下所示:

    $scope.$watch('contractCancellationDate', function (newValue) {
        if ($scope.contract) {
            if (newValue)
                $scope.contract.cancellationDate = new Date(newValue);
            else
                $scope.contract.cancellationDate = null;
        }
    });

    $scope.$watch('contract.cancellationDate', function (newValue) {
        if (newValue)
            $scope.contractCancellationDate = $filter('date')(newValue, 'MM/dd/yyyy');
        else
            $scope.contractCancellationDate = null;
    });

我有一个名为“contract”的模型类,其中包含“cancellationDate”属性。我还创建了一个名为“contractCancellationDate”的$ scope变量。我没有将我的文本字段绑定到“contract.cancellationDate”,而是将其绑定到“contractCancellationDate”。

我还发现奇怪的是,我正在使用的正则表达式需要前导零以表示单位数月/日值,如果我尝试输入零作为第一个字符,则会阻止第一次击键被接受但如果我再次按0键,它会出现在文本框中。我没有在另一台机器上试过,所以谁知道那里发生了什么。然而,我注意到,一旦输入日期的所有10个字符而不是之前(并且没有特别关联失去焦点的字段),监视代码就会执行。我在场上设置了最大长度为10。

有更好的方法吗?我试图解决这个问题对我来说似乎非常困难,但它仍然无法正常工作。

0 个答案:

没有答案