微信小程序中时间戳的转换及解决代码嵌套显示问题

在上一篇中讲了怎样实现小程序中的代码高亮,但是并不完美。
高亮的思路是遍历所有 <code> 标签,对 class='lang-xxx' 进行高亮实现。试想,如果我要写一篇文章,在我的文本中刚好出现了 <code class='lang-'> ,显然,这样的文本也会被默认转换,从而造成了信息的缺失。

解决思路

看一下我们的转化函数:
在这里插入图片描述
是先对文本中的特殊字符转换后,才进行的代码高亮,也就是说,在转换的过程中,
观察 api 可发现,在 <code> 代码文本中,<> 分别用 &lt&rt 来表示。所以,我们在高亮之前,就把代码段中的 &lt &rt 转化为了 <>, 导致高亮的时候,highlight.js 以为代码段中的 <code> 也是 html 标签,才出现上述问题。
解决的方法其实很简单,修改 wxDiscode.js 中的 function strcharacterDiscode(str) 即可。
注释掉原来的转化方法,用上面两个符号

    str = str.replace(/&lt;/g, '‹');
    str = str.replace(/&gt;/g, '›');
    //str = str.replace(/&lt;/g, '<');
    //str = str.replace(/&gt;/g, '>');
	

这样一来,转化时便会把 &lt&rt 变成 ,因此也就不会被当作文本符号 < >去识别,并且还能在文章中无障碍显示,丝毫不影响阅读。这个操作让我想起了年少懵懂,初识 hello world 时看到的一则故事:李雷在接手韩梅梅的代码后,编译一直报错,后来经过熬秃洗礼,已经变成 子田 的李雷终于大彻大悟,原来代码中的 | ( 或),是另一个字符 丨 (gun)


时间戳转换

在传输过程中,为了传输效率,时间戳会被自动变成 Sun, 24 Feb 2019 01:00:03 GMT 这种格式。如你所见,严重影响阅读,好在微信小程序中快速启动模板下已经把转换烦发写好了。没有使用快速模板也没事,就是几行代码而已。创建 util.js,粘贴以下代码。

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours() 
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}
module.exports = {
  formatTime: formatTime
}

引用该方法,遍历文章集合,把所有 time 进行转换。

var time = require('utils/util.js')
let post_ = res.data.posts;  //res.data.posts 你api中的文章
         // console.log('xian:' + new Date(post_[0]['time'].replace('GMT','')));
            for(var i=0;i<post_.length;i++){
              post_[i]['time'] = time.formatTime(new Date(post_[i]['time']))
             let comment_ = post_[i].new_comment.comments;
                for (var j = 0; j < comment_.length; j++) {
                  comment_[j]['time'] = time.formatTime(new Date(comment_[j]['time']))

这时可能会出现转换后比原时间慢了 8 小时这种情况,原因是 time 中出现了 GMT 格林威治时间,这是要比北京时间慢 8 小时的,使用 replace 替换掉其中的 GMT 即可恢复正常。

	post_[i]['time'] = time.formatTime(new Date(post_[i]['time'].replace('GMT', '')))

好了,结束了。
效果如图:
在这里插入图片描述
源代码在: github-Jarry007

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值