在Cosmos DB存储过程中使用Javascript获取ISO-8601格式的日期

时间:2019-02-19 04:56:36

标签: javascript stored-procedures azure-cosmosdb

我正在为Cosmos DB编写存储过程。我对JavaScript不太熟悉。

我一直在尝试获取ISO-8601格式的Date,但到目前为止仍未成功。根据我发现的some docs,我应该只能在toISOString上呼叫Date。那是行不通的(“对象不支持属性或方法”错误。)

所以我发现this advice可以自己定义原型:

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
}

但是,此 still 失败并显示:

Object doesn't support property or method 'toISOString'

我尝试完全删除原型,而只是使用带有Date的函数。但是,然后发生了相同的错误,但对于其他成员,例如getUTCFullYear

我也尝试致电getSeconds,但由于相同的原因而失败了。出于绝望,我尝试使用this answer中的getKeys函数列出对象的属性,这给了我一个空列表。

这是怎么回事?我怎样才能获得ISO-8601格式的Date来表示UTC的当前时间?

1 个答案:

答案 0 :(得分:1)

好吧,似乎是因为我使用了these docsDate.now()而不是this random google resultnew Date()

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