开发者问题收集

解析日期时出错请提供有效的 ISO 8601 日期时间 Ionic

2018-02-27
13556

我已将日期作为时间戳保存在服务器数据库中。

然后,我使用以下代码将时间戳转换为日期

completeDate : new Date(timestamp);


It shows date : Wed Feb 28 2018 00:35:06 GMT+0530 (IST)

但是,当我尝试在 ion-datetime 中设置时,它会抛出错误

    <ion-datetime displayFormat="MM/DD/YYYY" [(ngModel)]="history.completeDate"></ion-datetime>

解析日期时出错:“2018 年 2 月 28 日星期三 00:35:06 GMT+0530 (IST)”。请提供有效的 ISO 8601 日期时间格式: https://www.w3.org/TR/NOTE-datetime

有人可以帮我解决这个问题吗

3个回答

就像 @Animator 所说的那样,您需要 ISO 8601 日期时间格式。

因此,您必须将类型定义为字符串并将值设置为:

completeDate : (new Date(timestamp)).toISOString();

有关 Date.prototype.toISOString() 的更多信息

Alan Rabello
2018-10-15

当我查看文档时,我发现了以下内容:

Ionic uses the ISO 8601 datetime format for its value. The value is simply a string, rather than using JavaScript's Date object. Additionally, when using the ISO datetime format, it makes it easier to serialize and pass within JSON objects, and sending databases a standardized format which it can be easily parsed if need be.

还有 ISO 8601 日期时间格式:

YYYY-MM-DDTHH:mmZ

Javascript 日期对象可以转换许多字符串格式,但此特定组件需要 ISO 8601 格式的字符串,因此您需要进行进一步转换。

Animator
2018-02-27

我尝试根据给定的日期格式手动创建 ISO 字符串 - 在我的情况下为:(dd-MMM-yyyy)

function xx_formatDate(p_date){
                //to resolve error - "Please provide valid ISO 8601 string."
                if(p_date){
                    let formattedDate = new Date(p_date);
                    let dateArr = formattedDate.toLocaleDateString().split('/');
                    let l_year = dateArr[2];
                    let l_month = dateArr[0];
                    let l_date = dateArr[1];
                    l_month = (l_month.length>1)? l_month : '0'+l_month;
                    l_date = (l_date.length>1)? l_date : '0'+l_date;

                    return l_year+'-'+l_month+'-'+l_date;
                } else {
                    return ;
                }
            }
Manna
2022-07-22