一. 问题重现
需要格式的时间 "2023-10-31T14:33:22Z"
今天再弄小程序的时候格式化时间,调试和安卓端都没问题,但使用ios出现NaN,去网上找了一遍,都说不能识别 ''-" 字符
en...很显然19年的事,现在还是没修复😅
二. 问题分析解决
看了很多教程大多都是在js中用,但是我需要wxs,高高兴兴ctrl+c,ctrl+v
wxs中不支持new Date()😅。
那直接暴力一点使用slice截取,但是会慢8小时(时区),有点麻烦。
最后都想用Moment 最后用了这段代码,先转化为时间戳,进行闰年平年计算。最后在对其时分日期进行计算。
function formatTime (date) {
var timestamp = Date.parse(date); //转化为时间戳
var timezoneOffset = 8 * 60 * 60 * 1000; // 中国时区偏移量,单位为毫秒
timestamp = timestamp + timezoneOffset;
timestamp = timestamp / 1000
var secPerDay = 24 * 60 * 60; // 每天的秒数
var secPerHour = 60 * 60; // 每小时的秒数
var secPerMin = 60; // 每分钟的秒数
// 计算年份
var year = Math.floor(timestamp / (secPerDay * 365)) + 1970;
// 计算该年份是否为闰年
var isLeapYear = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
// 计算该年份的天数
var daysInYear = isLeapYear ? 366 : 365;
// 计算该年份距离该时间戳所在年份的天数
var daysInPrevYears = 0;
for (var y = 1970; y < year; y++) {
daysInPrevYears += (isLeapYear ? 366 : 365);
isLeapYear = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
}
var daysInCurrentYear = Math.floor((timestamp - daysInPrevYears * secPerDay) / secPerDay);
// 计算月份和日期
var daysInMonth = [31, isLeapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var month = 0;
var day = daysInCurrentYear;
for (var i = 0; i < daysInMonth.length; i++) {
if (day < daysInMonth[i]) {
month = i;
break;
}
day -= daysInMonth[i];
}
month++;
// 计算小时、分钟和秒数
var hour = Math.floor((timestamp % secPerDay) / secPerHour);
var minute = Math.floor((timestamp % secPerHour) / secPerMin);
var second = Math.floor(timestamp % secPerMin);
// 返回格式化后的字符串
return year + "-" + (month < 10 ? "0" : "") + month + "-" + (day < 10 ? "0" : "") + day + " " + (hour < 10 ? "0" : "") + hour + ":" + (minute < 10 ? "0" : "") + minute + ":" + (second < 10 ? "0" : "") + second;
}