如何将以字符串格式从webapi返回的日期转换为AngularJs的javascript日期格式

沙林

我有许多.net webApi操作,它们返回反序列化为JSON的日期。然后,我的angular应用程序将这些日期字符串用于显示\ edit或作为各种日期指令中的ngModel使用。这些指令中的许多指令都需要javascript日期对象,而不是日期的字符串表示形式。如何将所有返回的webapi数据的日期字符串序列化回javascript日期?

注意:我已经尝试了各种符合ISO 8601的正则表达式,但是我使用的每一个正则表达式都有很多失败的用例。我要求的情况如下:

  1. 不应转换非日期(字符串),例如' http:// blah / '
  2. 不应转换非日期(整数),例如2015
  3. 不应转换错误的日期,例如“ 2009-05-19T14a39r”
  4. 不应将部分无效日期从字符串转换为日期,例如“ 1”
  5. 不应转换看起来像年份的字符串,例如“ 2015”
  6. 应该将日期从字符串转换为日期,例如'2015-09-09'
  7. 应该将日期和时间从字符串转换为日期和时间,例如'2009-05-19T14:39'
  8. 应该将日期和时间从字符串转换为日期和时间(包括秒),例如'2009-05-19T14:39:23'

  9. 应该将日期和时间转换为毫秒,从字符串转换为日期和时间转换为毫秒,例如“ 2016-06-09T13:02:39.957”

  10. 应该在UTC中将带日期的日期从字符串转换为带时间的日期,例如'2009-05-19T14:39Z'

  11. 不应转换较长字符串的一部分的日期,例如“不应转换2015-12-12T00:00:00Z,因为这是较长字符串的一部分”

沙林

因此,首先,为了将所有字符串日期截取并将其转换为javascript日期,我们需要angular来进行截取和替换。为此,我们可以在httpProvider上使用拦截器,以确保在执行任何其他代码之前,我们的代码可在所有返回的http响应上运行。

var app = angular.module('app');

app.config(configureProviders);

configureProviders.$inject = ['$httpProvider'];
function configureProviders($httpProvider) {
    configureHttp($httpProvider);
}

function configureHttp(httpProvider) {
    // add all http interceptors
    httpProvider.interceptors.push('dateDeserialiserInterceptor');
}

好的,所以现在我们已经注册了拦截器,但是我们需要一些代码来使其工作:

(function () {
    var module = angular.module('myApp.interceptors');

    module.factory('dateDeserialiserInterceptor', function () {

        function convertDateStringsToDates(input) {
            // Ignore things that aren't objects.
            if (typeof input !== "object") return input;

            for (var key in input) {
                if (!input.hasOwnProperty(key)) continue;

                var value = input[key];
                // Check for string properties which look like dates.
                if (typeof value === "string" && (moment(value, moment.ISO_8601).isValid())) {
                    input[key] = moment(value, moment.ISO_8601).toDate();
                } else if (typeof value === "object") {
                    // Recurse into object
                    convertDateStringsToDates(value);
                }
            }
        };

        return {
            response: function (response) {
                convertDateStringsToDates(response);
                return response;
            }
        };
    });
})();

因此,以上代码最初是从某个地方的Internet上删除的,并进行了手动regEx比较。regEx被描述为符合ISO 8601,但我发现了许多不符合该标准的示例。现在,这依赖于开源库momentJs来确定日期是否符合ISO 8601并进行转换。如果日期不符合要求,则仅返回字符串值。ISO 8601是一个很好的使用标准(因为它涵盖了许多情况),比硬编码任何预期的特定格式要好得多,因为这可能会导致您走上“哦……不见了”的道路。

目前,它正在解析所有返回的响应对象值以获取潜在日期。我考虑过通过使用我们期望是日期的响应属性显式标记请求来改善此问题。这样,我们就不必尝试\解析所有内容(这很慢),并且也冒着我们不想转换的内容被转换的风险。但是,这种方法有点混乱,会乱扔很多请求。我暂时喜欢这种方法,而且似乎可行。很高兴它得到改善!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将多个日期格式的字符串转换为时区格式的时间戳

来自分类Dev

如何将字符串日期(25.04.2016)转换为日期格式(mm / dd / yyyy)?

来自分类Dev

如何将JSON字符串日期转换为自定义格式日期?

来自分类Dev

如何将仅包含日期和月份的字符串转换为日期格式

来自分类Dev

如何将字符串格式日期 yyyymmddThhmmss.sss 转换为 Bash 中的日期?

来自分类Dev

如何将日期字符串转换为自定义日期格式?

来自分类Dev

如何将BST和GMT格式的字符串日期转换为SQL Server格式作为日期类型

来自分类Dev

如何将欧洲格式的字符串日期转换为有效的mysql日期格式?

来自分类Dev

如何将字符串转换为日期格式dd / MM / yyyy

来自分类Dev

C#-如何将字符串日期转换为DateTime格式

来自分类Dev

如何将ngbDatepicker日期格式转换为形式的字符串onSubmit()?

来自分类Dev

如何将日期转换为格式化的字符串

来自分类Dev

使用python下载Excel文件时如何将字符串转换为日期格式

来自分类Dev

如何将日期转换为格式为YYYYMMDD的字符串?

来自分类Dev

如何将自定义的“ dayHour”字符串变量转换为日期格式?

来自分类Dev

如何将数字字符串转换为日期格式

来自分类Dev

如何将jquery中的日期字符串转换为所需格式

来自分类Dev

如何将API提供的日期/时间字符串转换为可读格式?

来自分类Dev

Android如何将字符串转换为日期时间格式?

来自分类Dev

如何将字符串转换为给定格式的日期

来自分类Dev

如何将日期时间字符串转换为另一种格式

来自分类Dev

Oracle:如何将字符串转换为日期格式

来自分类Dev

我如何将数据表日期转换为某种字符串格式

来自分类Dev

如何将特定格式的字符串转换为日期/秒 shell 脚本 linux

来自分类Dev

如何将以字符串形式存储的日期解析为Java中的其他格式?

来自分类Dev

如何在pyspark中将日期时间从字符串格式转换为日期时间格式?

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

将日期字符串转换为JSON日期格式

来自分类Dev

如何将C#使用的日期时间格式字符串转换为moment.js使用的格式?

Related 相关文章

  1. 1

    如何将多个日期格式的字符串转换为时区格式的时间戳

  2. 2

    如何将字符串日期(25.04.2016)转换为日期格式(mm / dd / yyyy)?

  3. 3

    如何将JSON字符串日期转换为自定义格式日期?

  4. 4

    如何将仅包含日期和月份的字符串转换为日期格式

  5. 5

    如何将字符串格式日期 yyyymmddThhmmss.sss 转换为 Bash 中的日期?

  6. 6

    如何将日期字符串转换为自定义日期格式?

  7. 7

    如何将BST和GMT格式的字符串日期转换为SQL Server格式作为日期类型

  8. 8

    如何将欧洲格式的字符串日期转换为有效的mysql日期格式?

  9. 9

    如何将字符串转换为日期格式dd / MM / yyyy

  10. 10

    C#-如何将字符串日期转换为DateTime格式

  11. 11

    如何将ngbDatepicker日期格式转换为形式的字符串onSubmit()?

  12. 12

    如何将日期转换为格式化的字符串

  13. 13

    使用python下载Excel文件时如何将字符串转换为日期格式

  14. 14

    如何将日期转换为格式为YYYYMMDD的字符串?

  15. 15

    如何将自定义的“ dayHour”字符串变量转换为日期格式?

  16. 16

    如何将数字字符串转换为日期格式

  17. 17

    如何将jquery中的日期字符串转换为所需格式

  18. 18

    如何将API提供的日期/时间字符串转换为可读格式?

  19. 19

    Android如何将字符串转换为日期时间格式?

  20. 20

    如何将字符串转换为给定格式的日期

  21. 21

    如何将日期时间字符串转换为另一种格式

  22. 22

    Oracle:如何将字符串转换为日期格式

  23. 23

    我如何将数据表日期转换为某种字符串格式

  24. 24

    如何将特定格式的字符串转换为日期/秒 shell 脚本 linux

  25. 25

    如何将以字符串形式存储的日期解析为Java中的其他格式?

  26. 26

    如何在pyspark中将日期时间从字符串格式转换为日期时间格式?

  27. 27

    将日期字符串转换为JSON日期格式

  28. 28

    将日期字符串转换为JSON日期格式

  29. 29

    如何将C#使用的日期时间格式字符串转换为moment.js使用的格式?

热门标签

归档