微信小程序使用moment.js进行日期相减得出相差天数的随笔记录

在这里插入图片描述
简单记录下今天使用moment.js遇到的问题;
场景:从数据库里获取的返回值delivery_date,要与当前日期做比较,得出相差多少天;
问题:直接写 let nowDeliveryDate = moment() //获取当前日期
let deliveryDate = moment(list.delivery_date); //用moment来显示获取的日期
list.shenyu_date = deliveryDate.diff(nowDeliveryDate,‘day’) ; //作对比.显示天数
本来这么写也没多大问题,就是会遇到这么一种情况,当list.delivery_date不是YYYY-MM-DD的格式时,它就会显示少一天,
比如今天是2019-06-13,然后list.delivery_date是2019-06-10 20:50:12,此时shenyu_date显示的是相差2天,而我想要的效
果是相差3天,因为这里时分秒也被计算进去了,所以不足一天,就不会计算进去;
所以第一次利用格式化去对比
是这样写的:
let nowDeliveryDate = moment().format(‘YYYY-MM-DD’) //获取当前日期
let deliveryDate = moment(list.delivery_date).format(‘YYYY-MM-DD’) ; //用moment来显示获取的日期
list.shenyu_date = deliveryDate.diff(nowDeliveryDate,‘day’) ; //作对比.显示天数
这个时候执行,控制台会报错dif

### 微信小程序 `util.js` 中的时间格式化与时间操作 在微信小程序中,可以利用 JavaScript 的原生日期对象来实现时间戳转换以及时间差计算的功能。以下是基于所提供的引用内容和专业知识构建的一个完整的解决方案。 #### 时间戳转为指定格式 可以通过创建一个函数,在该函数内部调用 JavaScript 原生的 `Date` 对象完成时间戳到具体时间格式的转换: ```javascript // util.js 文件中的时间格式化方法 function formatTime(timestamp, fmt = 'Y-M-D h:m:s') { const date = new Date(parseInt(timestamp) * 1000); // 将秒级时间戳转换成毫秒级并解析为日期对象 let ret; const opt = { "Y+": date.getFullYear().toString(), // 年 "M+": (date.getMonth() + 1).toString(), // 月 "D+": date.getDate().toString(), // 日 "h+": date.getHours().toString(), // 时 "m+": date.getMinutes().toString(), // 分 "s+": date.getSeconds().toString() // 秒 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (("00" + opt[k]).substr(("" + opt[k]).length))); } } return fmt; // 返回最终格式化的字符串 } ``` 上述代码定义了一个名为 `formatTime` 的函数用于将给定的时间戳按照自定义格式进行显示[^1]。 --- #### 计算两个时间之间的差异 为了支持时间相减的操作,可编写如下辅助函数: ```javascript /** * @param {number} startTimestamp 起始时间戳(单位:秒) * @param {number} endTimestamp 结束时间戳(单位:秒) */ function calculateTimeDifference(startTimestamp, endTimestamp) { const diffInSeconds = Math.abs(endTimestamp - startTimestamp); const days = Math.floor(diffInSeconds / (24 * 60 * 60)); const hours = Math.floor((diffInSeconds % (24 * 60 * 60)) / (60 * 60)); const minutes = Math.floor(((diffInSeconds % (24 * 60 * 60)) % (60 * 60)) / 60); const seconds = ((diffInSeconds % (24 * 60 * 60)) % (60 * 60)) % 60; return `${days} 天 ${hours} 小时 ${minutes} 分钟 ${seconds} 秒`; } module.exports = { formatTime, calculateTimeDifference }; ``` 此部分实现了两时间点间差距的具体展示逻辑。 --- #### 使用说明 以上述方式封装好工具类之后,可以在其他业务模块里轻松引入这些公共方法来进行时间和日期方面的处理工作。例如在一个页面组件内加载数据的同时也需同步更新其发布时间距离当前时刻有多久,则只需简单几行代码即可达成目标效果。 ```javascript const utils = require('../../utils/util'); Page({ data: { postCreateTimeFormatted: '', timeAgoText: '' }, onLoad(options) { const createTimeStamp = options.createTimeStamp || Date.now(); // 获取文章创建时间戳,默认取现在 this.setData({ postCreateTimeFormatted: utils.formatTime(createTimeStamp), timeAgoText: utils.calculateTimeDifference(createTimeStamp / 1000, Date.now() / 1000) }); } }); ``` 这里展示了如何从外部导入我们之前制作好的帮助器,并将其应用于实际场景之中。 --- #### 关于全局配置的影响 值得注意的是,如果涉及到网络请求超时时限调整等问题的话,请记得修改项目根目录下 `app.json` 文件内的相关内容以满足需求[^2]^: ```json { "networkTimeout": { "request": 10000, "connectSocket": 10000, "uploadFile": 10000, "downloadFile": 10000 } } ``` 这样做的目的是为了避免因默认值过低而导致某些耗时较长的任务失败的情况发生[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值