在时刻js的弃用警告

Jem*_*mai 139 javascript jquery momentjs

我需要帮助我在我的代码上收到警告,提供的值不是公认的ISO格式.我今天用时刻功能改变我的变量,但它仍然不起作用.

这是警告错误

弃用警告:提供的值不是公认的ISO格式.时刻构造回落到js Date(),这在所有浏览器和版本中都不可靠.不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除.有关更多信息,请参阅http://momentjs.com/guides/#/warnings/js-date/.参数:[0] _isAMomentObject:true,_isUTC:true,_useUTC:true,_l:undefined,_ i:2016-9-26 19:30,_f:undefined,_strict:undefined,_locale:[object Object]

 var entryDate = new Date();
 var currentDate = entryDate.getDate();

        function between(x,min,max) { 
            return x.valueOf() >= min.valueOf() && x < max.valueOf();
        };

        $("#custom1").change(function(){
            if ($("#custom1 :selected").val() == "AU" ) {
                var keyword = "";

                var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');              
                var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');              
                var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');                  
                var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');                 
                var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
                var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
                var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
            } 

            else if ($("#custom1 :selected").val() == "NZ" ) {
                var aus1_s =  moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
                var aus2_s =  moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
                var aus3_s =  moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
                var aus4_s =  moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
                var aus5_s =  moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
                var aus6_s =  moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
                var aus6_e =  moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
            }

            else {
                $("#entryEquals").val("");
                return false;
            }

           var today = moment();

            switch (true) {
                case between (today, aus1_s, aus2_s):
                keyword = "RElYT04=";
                break;

                case between (today, aus2_s, aus3_s):
                keyword = "QlJJREU=";
                break;

                case between (today, aus3_s, aus4_s):
                keyword = "U1lETkVZ";
                break;

                case between (today, aus4_s, aus5_s):
                keyword = "R1JPT00=";
                break;

                case between (today, aus5_s, aus6_s):
                keyword = "V0VERElORw==";
                break;

                case between (today, aus6_s, aus6_e):
                keyword = "VExD";
                break;

                default:
                $("#entryEquals").val("");
                break;
            }

        $("#entryEquals").val(keyword);

        });
Run Code Online (Sandbox Code Playgroud)

chr*_*989 148

查看他们所有的精彩文档!

这是他们讨论警告信息的地方.

字符串+格式

警告:浏览器对解析字符串的支持不一致.因为没有关于应该支持哪种格式的规范,所以在某些浏览器中有效的功能在其他浏览器中不起作用.

为了解析除ISO 8601字符串以外的任何内容的一致结果,您应该使用String + Format.

moment("12-25-1995", "MM-DD-YYYY");
Run Code Online (Sandbox Code Playgroud)

字符串+格式(多种格式)

如果您有多种格式,请查看其String +格式(带有's').

如果您不知道输入字符串的确切格式,但知道它可能是众多格式之一,则可以使用格式数组.

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Run Code Online (Sandbox Code Playgroud)

请查看文档以获取更具体的信息.

时区

Checkout Parsing in Zone,时区的等效文档.

moment.tz构造函数采用与构造函数相同的所有参数,但使用最后一个参数作为时区标识符.

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");
Run Code Online (Sandbox Code Playgroud)

编辑

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
    var region = 'Australia/Sydney';

    aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);              
    aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);              
    aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);                  
    aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);                 
    aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
    aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
    aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
    var region = 'Pacific/Auckland';

    aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
    aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
    aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
    aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
    aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
    aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
    aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...
Run Code Online (Sandbox Code Playgroud)

  • 请提供实际答案,而不是复制和粘贴文档. (75认同)
  • 这是帮助我将格式设置为"输入"的时刻 - 时刻("12-25-1995",["MM-DD-YYYY","YYYY-MM-DD"]); (2认同)
  • @Rebs我想我添加了很多文档,因为一般的解决方案并不直接。显然,Jemai的特定解决方案应该已经在答案中了,自那以后,我已经添加了它(感谢您!),但是前者就是为什么这里有如此多的文档。 (2认同)
  • 这对我有帮助 --&gt; moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]); (2认同)

Jig*_*att 39

做一下(新日期("27/04/2016")).格式....似乎有效.这个对我有用.

  • 这是避免控制台污染的最简单方法 (5认同)
  • 对于任何需要处理IE支持的人,我都不建议采用这种方法。结果非常不稳定,特别是在IE 11上。 (2认同)

Sha*_*han 11

我遇到了这个错误,因为我试图传递一个日期localStorage.将日期传递给一个新Date对象,然后调用.toISOString()为我做了诀窍:

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());
Run Code Online (Sandbox Code Playgroud)

这会抑制控制台中的任何警告.


小智 8

像这样在您的函数中使用时刻

 moment(new Date(date)).format('MM/DD/YYYY')
Run Code Online (Sandbox Code Playgroud)

  • 您能定义这个答案中的日期吗? (2认同)

Bea*_* 30 7

您可以使用

moment(date,"currentFormat").format("requiredFormat");
Run Code Online (Sandbox Code Playgroud)

这应该在日期不是 ISO 格式时使用,因为它会告诉我们当前的格式是什么。

  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (2认同)

Saa*_*ran 6

这个答案是为了更好地理解此警告

当您使用力矩创建时间对象时,会引起过时警告var today = moment();

如果您可以接受此警告,那么我有一种更简单的方法。

不要使用date从对象js的使用moment来代替。例如,用于moment()获取当前日期。

或将js日期对象转换为moment日期。您只需指定js日期对象的格式即可。

moment("js date", "js date format");

例如:

moment("2014 04 25", "YYYY MM DD");
Run Code Online (Sandbox Code Playgroud)

(但只有在您不赞成使用之前,才可以使用此方法,以后可能会贬值moment

  • 认真!有关如何删除此弃用警告的问题!不问如何使用此弃用!另外,它已经被弃用了,而不是“将来可能会贬值”,而不是“将来会被删除”! (6认同)
  • 谢谢,这是真正向我展示了我可以在这里了解的答案。 (2认同)

小智 5

Parsing string with moment.js.

const date = '1231231231231' //Example String date
const parsed = moment(+date);
Run Code Online (Sandbox Code Playgroud)


小智 5

在代码中添加以下行以抑制警告:

const moment = require('moment');

moment.suppressDeprecationWarnings = true;

  • 这可行,但这就像从火警警报器中取出电池一样 (13认同)