【问题标题】:Ionic Please provide a valid ISO 8601 datetime format datetime issueIonic 请提供有效的 ISO 8601 日期时间格式日期时间问题
【发布时间】:2021-08-03 06:48:07
【问题描述】:

我正在尝试通过 ngModel 绑定我的 Ionic DateTime 组件。我从后端得到一个看起来像这样的值

"30-07-2021 12:00:00 AM"

然后我把它处理成-

var date = "30-07-2021 12:00:00 AM"
var finalDate = date.split(" ")[0].split("-");
var fdate =
  finalDate[2] +
  "-" +
  finalDate[1] +
  "-" +
  finalDate[0];
var ISOdate =  new Date(fdate).toISOString() 
console.log(ISOdate);

我得到一个错误 "解析日期时出错:"2021-07-30T00:00:00.000Z"。请提供有效的 ISO 8601 日期时间格式"

我在这里做错了什么?

这是我的日期时间组件-

<ion-datetime
  (ionChange)="onChange(filters.DTO_Property_Name,$event,filters.Data_Type_Enum)"
   cancelText="Clear"
   (ionCancel)="clear(filters.Filter_Name)"
   [(ngModel)]="myDateValues[filters.Filter_Name]"
   displayFormat="DD/MM/YYYY"
    >
</ion-datetime>

【问题讨论】:

    标签: javascript datetime ionic-framework ionic3


    【解决方案1】:

    评论多于回答。

    您正在解析像“30-07-2021 12:00:00 AM”这样的字符串,首先将其解析并重新格式化为“2021-07-30 12:00:00 AM”,然后使用内置解析器.这不是一个好主意,因为字符串不是 ECMA-262 支持的格式,因此解析取决于实现。

    字符串应该被视为本地的,所以:

    new Date(fdate).toISOString();
    

    不应生成像“2021-07-30T00:00:00.000Z”这样的时间戳,除非您的偏移量为 +0 或它被解析为 UTC(它也可能返回“无效日期”或引发范围错误)。我猜你希望它被视为 UTC。

    离子解析器可能对 toISOString 生成的小数秒感到不安,所以要么删除它们,要么不使用 toISOString

    例如只需重新格式化字符串,避免 DatetoISOString:

    // Reformat "30-07-2021 12:00:00 AM" to "2021-07-30T00:00:00Z"
    function formatTimestamp(ts) {
      let [D,M,Y,h,m,s,ap] = ts.toLowerCase().split(/\W/);
      h = String(h%12 + (ap == 'am'? 0 : 12)).padStart(2, '0');
      return `${Y}-${M}-${D}T${h}:${m}:${s}Z`;  
    }
    
    console.log(formatTimestamp("30-07-2021 12:00:00 AM"));

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2020-11-23
      • 2022-10-15
      相关资源
      最近更新 更多