在时刻js的弃用警告

时间:2016-10-11 02:22:20

标签: 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);

        });

13 个答案:

答案 0 :(得分:122)

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

以下是他们讨论Warning Message

的地方

字符串+格式

  

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

     

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

moment("12-25-1995", "MM-DD-YYYY");

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

如果您有多种格式,请查看他们的String + Formats(使用&#39; s&#39;)。

  

如果你不知道输入字符串的确切格式,但知道它可能是众多格式之一,你可以使用一系列格式。

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

请查看文档以了解更具体的内容。

时区

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

  

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

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

修改

//...
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);
}
//...

答案 1 :(得分:17)

这样做对我有用:

moment(new Date("27/04/2016")).format

答案 2 :(得分:7)

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

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

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

答案 3 :(得分:4)

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

当您使用片刻创建时间对象var today = moment();时,会导致弃用警告。

如果这个警告对您没问题,那么我有一个更简单的方法。

请勿使用date使用js的{​​{1}}对象。例如,使用moment获取当前日期。

或将moment()日期对象转换为js日期。您可以简单地指定moment日期对象的格式。

js

例如:

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

(但是你只能使用这种方法直到它被贬低,这可能会在moment("2014 04 25", "YYYY MM DD"); 以后被折旧)

答案 4 :(得分:4)

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

 moment(new Date(date)).format('MM/DD/YYYY')

答案 5 :(得分:4)

您可以使用

moment(date,"currentFormat").format("requiredFormat");

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

答案 6 :(得分:1)

使用moment.js解析字符串。

const date = '1231231231231' //Example String date
const parsed = moment(+date);

答案 7 :(得分:0)

在代码中添加以下行以禁止显示警告:

const moment = require('moment');

moment.suppressDeprecationWarnings = true;

答案 8 :(得分:0)

我面临类似的问题,并通过以下解决方法解决: 我的日期格式是:“ 2020年12月11日星期五,格林尼治标准时间+0500(巴基斯坦标准时间)”

let currentDate = moment(new Date('Fri Dec 11 2020 05:00:00 GMT+0500 (Pakistan Standard Time)').format('DD-MM-YYYY'); // 'Fri Dec 11 2020 05:00:00 GMT+0500 (Pakistan Standard Time)'

let output=(moment(currentDate).isSameOrAfter('07-12-2020'));

答案 9 :(得分:0)

groupBy

moment.suppressDeprecationWarnings = true;

答案 10 :(得分:0)

一个简单的答案:

# pass column names as string
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
# make dict of dtypes
dict_dtypes = {x : 'str'  for x in names}
pd.read_csv('iris.data', dtype=dict_dtypes)

答案 11 :(得分:0)

我使用 moment 将我的日期值转换为我想要的格式。 来自数据库的日期值就像

2021-06-07T22:00:00.000Z

我所做的如下:

dateNeeded = moment(dateNeeded , moment.ISO_8601).format('YYYY-MM-DD');

参考资料在这里: https://momentjs.com/docs/#/parsing/string-format/

答案 12 :(得分:0)

就我而言,这个错误发生在

moment('2021-07-1')

正确的做法是

moment('2021-07-01')

当月/日小于10时,需要在前面加上0