首页 > 解决方案 > 在 Cosmos DB 存储过程中使用 Javascript 获取 ISO-8601 格式的日期

问题描述

我正在为 Cosmos DB 编写一个存储过程。我对 JavaScript 不是很熟悉。

我一直在尝试获取 ISO-8601 formatted Date,但到目前为止还没有成功。根据我发现的一些文档,我应该能够调用toISOString. Date这不起作用(“对象不支持属性或方法”错误)。

所以我找到了自己定义原型的建议:

function storedProcedure(arg) {
    if (!Date.prototype.toISOString) {
        // Here we rely on JSON serialization for dates because it matches
        // the ISO standard. However, we check if JSON serializer is present
        // on a page and define our own .toJSON method only if necessary
        if (!Date.prototype.toJSON) {
            var toISOString = function (date) {
                function f(n) {
                    // Format integers to have at least two digits.
                    return n < 10 ? '0' + n : n;
                }

                return date.getUTCFullYear() + '-' +
                    f(date.getUTCMonth() + 1) + '-' +
                    f(date.getUTCDate()) + 'T' +
                    f(date.getUTCHours()) + ':' +
                    f(date.getUTCMinutes()) + ':' +
                    f(date.getUTCSeconds()) + 'Z';
            };
        }

        Date.prototype.toISOString = Date.prototype.toJSON;
    }

    var now = Date.now();
    var iso8601 = now.toISOString();
    console.log("ISO " + iso8601);

    // other code
}

但是,这仍然失败:

Object doesn't support property or method 'toISOString'

Date我尝试完全删除原型,而只使用一个取而代之的函数。然而,同样的错误发生在其他成员身上,比如getUTCFullYear.

我也试过打电话getSeconds,但出于同样的原因失败了。出于绝望,我尝试使用此答案getKeys中的函数列出对象的属性,它给了我一个空列表。

这里发生了什么?如何获得Date以 UTC 表示当前时间的 ISO-8601 格式?

标签: javascriptstored-proceduresazure-cosmosdb

解决方案


好的,这似乎是因为我使用了Date.now()这些文档而不是new Date()这个随机的谷歌结果

我不知道为什么这很重要,也不知道我怎么知道这一点(欢迎解释),但这是根本原因。我现在什至不需要原型。


推荐阅读