iOS 日期格式化出现NaN

Posted Xiao冰同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 日期格式化出现NaN相关的知识,希望对你有一定的参考价值。

问题描述

最近在使用uniapp开发App时,需要将后端发过来的 格式为 “yyyy-MM-dd HH:mm:ss"的格式转化为 “yyyy-MM-dd”,在android平台并无任何问题,但是在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")

最后结果

以上是关于iOS 日期格式化出现NaN的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 日期格式导致年份+1

iOS-时间格式ISO 8601

restkit 中的 ios NSDateFormatter

IOS开发之格式化日期时间

iOS日期格式,以毫秒和时区为准

在 iOS 5 应用程序中对 iOS 6 功能的条件支持