javascript - Ionic 请提供有效的 ISO 8601 日期时间格式日期时间问题
问题描述
我正在尝试通过 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>
解决方案
评论多于回答。
您正在解析像“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。
例如,只需重新格式化字符串,避免Date和toISOString:
// 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"));
推荐阅读
- snowflake-cloud-data-platform - 在变体数据类型 -snowflake 存储过程中插入 JSON 对象时出错
- django - Django DRF:在单个请求中保存不同模型中的数据
- docker - dockerfile 中的 apt-get update 问题 - 命令挂起
- php - 没有得到 Laravel 的关系
- tensorflow - Resnet18 在 CIFAR100 数据集中效果不佳
- apache-nifi - 使用 10,000 多个传感器数据进行 nifi 摄取?
- flutter - 使用 SingleChildScrollView 和 Wrap Widget with a lot of children 时如何实现平滑滚动?
- node.js - ReferenceError:未定义成员
- windows-10 - 如何安装 Rainmeter 插件
- python - 使用 Difflib get_matching_blocks 的模糊字符串匹配未检测到所有子字符串