iOS 日期格式化出现NaN

文章讲述了在使用uniapp开发App时遇到的一个问题,即在iOS平台上将“yyyy-MM-ddHH:mm:ss”格式的日期转化为“yyyy-MM-dd”时出现NaN的情况。原因是iOS的Date对象不识别“-”。解决方案是在转换前将字符串中的“-”替换为“/”。提供了一个名为`timeFormat`的函数示例,用于处理这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

最近在使用uniapp开发App时,需要将后端发过来的 格式为 “yyyy-MM-dd HH:mm:ss"的格式转化为 “yyyy-MM-dd”,在Android平台并无任何问题,但是在iOS上出现了NaN的问题,效果如下图所示
iOS 图片Nan的问题呢
起初我以为是 uniapp的bug,但是查询相关资料发现是 iOS上的WebView的问题,iOS的Date不识别 “-”,所以解决思路就是 在 new Date(sz)之前,将字符串所有的“-”替换为”/",具体的代码

/**
 * @description 简述:时间格式
 * @param date: 时间 eg:new Date()
 * @param fmt:格式  eg:yyyy-MM-dd HH:mm:ss  yyyy-MM-dd
 * @return String
 * @example timeFormat(new Date(), "yyyy-MM-dd HH:mm:ss") or timeFormat("2022-02-13", "yyyy-MM-dd HH:mm:ss")
 * */
export function timeFormat(date, fmt = "yyyy-MM-dd") { 
	if (date == null || date == '' || date == undefined)
		return "";
	if(typeof(date) == "string") {
		// 判断系统平台属于哪个平台,如果是其它开发前端框架,则需要调整这行代码
		if (uni.getSystemInfoSync().platform == 'ios') {
			// 解决ios手机时间格式化NaN问题
			date = date.replace(/-/g,'/')
		}
		date = new Date(date)
	}
	else if (!(date instanceof Date)) {
		date = new Date(date)
	}
	var o = {
	"M+": date.getMonth() + 1, //月份 
	"d+": date.getDate(), //日 
	"H+": date.getHours(), //小时 
	"m+": date.getMinutes(), //分
	"s+": date.getSeconds(), //秒 
	"q+": Math.floor((date.getMonth() + 3) / 3), //季度 
	"S": date.getMilliseconds() //毫秒 
	};
	if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
	for (var k in o)
		if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
}

如何调用

timeFormat(new Date(), "yyyy-MM-dd HH:mm:ss")
timeFormat("2022-02-13", "yyyy-MM-dd HH:mm:ss")

最后结果

最后效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值