iOS WebView显示经典ASP页面时间格式异常的修正方式咨询
嗨,这个问题其实两种路子都能走——要么在经典ASP这边提前把日期转成标准的字符串格式,要么在iOS的WebView里做格式修正。我给你详细拆解下两种方案的实现步骤:
方案一:在经典ASP端转换日期格式
这种方案的好处是所有客户端(包括iOS)都能拿到统一的标准格式,不用每个端单独写适配逻辑,推荐优先考虑。
首先我们要先确认fpx_sellerTxnTime是ASP能识别的有效日期值(比如常见的YYYY-MM-DD HH:MM:SS、MM/DD/YYYY这类格式),然后用ASP的日期函数来拼接成你要的DD-MM-YYYY HH:MM:SS格式,还要注意给个位数的日、月、时、分、秒补零:
<% fpx_sellerTxnTime = request.Form("fpx_sellerTxnTime") Dim txnDate, formattedDate ' 先判断是否为有效日期,避免转换出错 If IsDate(fpx_sellerTxnTime) Then txnDate = CDate(fpx_sellerTxnTime) ' 拼接成目标格式,Right("0" & 数值, 2)用来补零 formattedDate = Right("0" & Day(txnDate), 2) & "-" & _ Right("0" & Month(txnDate), 2) & "-" & _ Year(txnDate) & " " & _ Right("0" & Hour(txnDate), 2) & ":" & _ Right("0" & Minute(txnDate), 2) & ":" & _ Right("0" & Second(txnDate), 2) Else ' 如果不是有效日期,可选择保留原字符串或提示错误 formattedDate = fpx_sellerTxnTime End If %>
之后你在页面里直接输出<%= formattedDate %>就可以了,这样iOS WebView拿到的就是标准格式的日期字符串,直接显示即可。
方案二:在iOS端WebView中修正格式
如果后端代码不方便修改,也可以在iOS端处理。这里有两种常见方式:
方式1:通过JavaScript注入修改页面内容
在WebView加载完成后,注入JS代码找到显示日期的元素,解析并重新格式化日期:
Swift 示例
func webViewDidFinishLoad(_ webView: UIWebView) { // 假设页面上显示日期的元素id是"txn-time" let formatScript = """ let timeElement = document.getElementById('txn-time'); if (timeElement) { const originalStr = timeElement.textContent.trim(); const date = new Date(originalStr); if (!isNaN(date.getTime())) { // JS月份从0开始,所以要+1 const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); timeElement.textContent = `${day}-${month}-${year} ${hours}:${minutes}:${seconds}`; } } """ webView.stringByEvaluatingJavaScript(from: formatScript) }
方式2:在原生代码中处理日期字符串
如果WebView是通过接口拿到日期字符串(而非直接渲染页面),可以在Swift/OC里直接解析并格式化:
Swift 示例
// 假设原日期字符串是"2024/05/20 14:30:00"这类格式 func formatTransactionTime(_ originalTime: String) -> String { let dateFormatter = DateFormatter() // 设置原日期的格式,根据实际传入的格式调整 dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss" if let date = dateFormatter.date(from: originalTime) { dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss" return dateFormatter.string(from: date) } // 解析失败则返回原字符串 return originalTime }
注意
如果原日期字符串是JS/原生Date无法直接解析的特殊格式,你需要先按分隔符拆分字符串,再重新拼接成目标格式。
内容的提问来源于stack exchange,提问作者Hanz Cheah
相关产品推荐
相关产品推荐

