小程序ios端时间格式化问题

文章讲述了在开发微信小程序时遇到的时间格式化问题,特别是在iOS环境下,使用WXS时不能直接使用`newDate()`。作者提供了使用Moment.js库处理时间戳,包括闰年和平年计算的详细代码来解决这个问题。
摘要由CSDN通过智能技术生成
一. 问题重现

需要格式的时间 "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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值