微信小程序——获取当天的前一个月至后一个月

看标题也不知道你有没有明白我想表达的意思,先上个动态图吧~

需要分析:

1.获取当前日期的前一个月,后一个月和当月。比如说现在是7月5号,我需要得到6月5号至8月5号的日期,同时还要返回当前的星期。

2.滑动到某个月份的区间的时候,左侧也相应的变到当前月份。比如我现在滑动到6月10号了,那么左侧就要显示成6月了。

3.页面打开默认是显示今天。

实现思路:

1.获取本月的数据(这个例子中就是从7.1至7.31)

2.获取上个月某号至月底的数据(这个例子中就是从6.5至6.30)

3.获取下个月1号至某号的数据(这个例子中就是从8.1至8.5)

4.获取这个月1号,今天,和下一个月1号的scrollLeft的值,这是为了在滑动的时候判断它当前的日期区间是在哪个月份,从而改变左侧的月份值。(这个例子中就是从7.1,7.5,8.1这三个scrollLeft的值)

5.默认显示今天可能通过改变scroll-view的scroll-left的值实现

主要用到的函数:

1.setDate(day):设置一个月的某一天

2.setMonth(month[,day]):设置月份,day是可选参数,可填可不填。填了返回某月的某一天,不填返回某月的第1天。

3.getMonth(),getDate(),getDay():获取月(从0开始),日期,星期(返回0时表示星期日)

具体代码:

JS:

// pages/teacher/interview/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },
  //获取星期
  getWeek(date) {
    let weekArray = [‘日‘, ‘一‘, ‘二‘, ‘三‘, ‘四‘, ‘五‘, ‘六‘];
    return weekArray[date.getDay()];
  },

  //滑动至某个区间时显示当前的月份
  dayScroll(e) {
    const scrollLeftArray = this.data.scrollLeftArray;
    console.log(e.detail.scrollLeft)
    let dayScrollLeft = e.detail.scrollLeft;

    if (dayScrollLeft < scrollLeftArray[0] - 100) {
      this.setData({
        showCurrentMonth: this.data.month
      })
    } else if (this.data.day < 7) {
      if (e.detail.scrollLeft > scrollLeftArray[2] - (7 - this.data.day)*100) {
        this.setData({
          showCurrentMonth: this.data.month + 2
        })
      }
    } else if (this.data.day >= 7){
      if (e.detail.scrollLeft > scrollLeftArray[2]) {
        this.setData({
          showCurrentMonth: this.data.month + 2
        })
      }
    } else {
      this.setData({
        showCurrentMonth: this.data.month + 1
      })
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    const _this = this;
    let now = new Date(),
      month = now.getMonth(),
      weekday = _this.getWeek(now),
      day = now.getDate(),
      prevMonth = month==0 ? 11 : month-1,
      nextMonth = month==11 ? 0 : month+1,
      lastDay = new Date((new Date().setMonth(month + 1, 1) - 1000 * 60 * 60 * 24)).getDate(), //获取当月最后一天日期;
      prevLastDay = new Date((new Date().setMonth(month, 1) - 1000 * 60 * 60 * 24)).getDate(); //获取上一个月最后一天日期; 

    let currentMonthDateArray = [], //当前月份的日期和星期的数据集合
      prevMonthDateArray = [], //上月日期和星期的数据集合
      nextMonthDateArray = []; //下月日期和星期的数据集合
    for (let i = 1; i <= lastDay; i++) {
      currentMonthDateArray.push({
        day: i,
        weekDay: _this.getWeek(new Date(new Date().setDate(i)))
      })
    }

    for (let i = day; i <= prevLastDay; i++) {
      prevMonthDateArray.push({
        day: i,
        weekDay: _this.getWeek(new Date(new Date().setMonth(month - 1, i)))
      })
    }

    for (let i = 1; i <= day; i++) {
      nextMonthDateArray.push({
        day: i,
        weekDay: _this.getWeek(new Date(new Date().setMonth(month + 1, i)))
      })
    }
    _this.setData({
      day: day,
      month: month,
      weekday: weekday,
      showCurrentMonth: month + 1,
      prevMonthDateArray: prevMonthDateArray,
      currentMonthDateArray: currentMonthDateArray,
      nextMonthDateArray: nextMonthDateArray
    })

    //获取左边距是为了滑动时改变月份
    const query = wx.createSelectorQuery();
    let scrollLeftArray = [];
    query.selectAll(`#day${month + 1}1, #day${month + 1}${day}, #day${month + 2}1`).boundingClientRect(function(rects) {
      rects.forEach(function(rect) {
        scrollLeftArray.push(rect.left)
      })
      _this.setData({
        scrollLeftArray: scrollLeftArray,
        scrollLeftInit: scrollLeftArray[1] - 100
      })
      console.log(scrollLeftArray)
    }).exec()
  },
})

wxml:

<view class=‘row day-wrap item-center‘>
  <view class=‘month fs-28 fc-66 shrink‘>
    <text class=‘fs-48‘>{{showCurrentMonth}}</text>月
  </view>
  <view class=‘day-list grow over-hidden‘>
    <scroll-view scroll-x="{{true}}" class=‘day-list-scroll row‘ bindscroll="dayScroll" scroll-left="{{scrollLeftInit}}px">
      <view class="day-item {{prevMonth.weekDay == weekday ? ‘weekday‘ : ‘‘}}" wx:for="{{prevMonthDateArray}}" wx:for-item="prevMonth" id="day{{month}}{{prevMonth.day}}">
        <view class=‘fs-24‘>{{prevMonth.weekDay}}</view>
        <view class=‘fs-32 mt-3‘>{{prevMonth.day}}</view>
      </view>
      <view class="day-item {{currentMonth.day == day ? ‘today‘ : ‘‘}} {{currentMonth.weekDay == weekday ? ‘weekday‘ : ‘‘}}" wx:for="{{currentMonthDateArray}}" wx:for-item="currentMonth" id="day{{month+1}}{{currentMonth.day}}">
        <view class=‘fs-24‘>{{currentMonth.weekDay}}</view>
        <view class=‘fs-32 mt-3‘>{{currentMonth.day}}</view>
      </view>
      <view class="day-item {{nextMonth.weekDay == weekday ? ‘weekday‘ : ‘‘}}" wx:for="{{nextMonthDateArray}}" wx:for-item="nextMonth" id="day{{month+2}}{{nextMonth.day}}">
        <view class=‘fs-24‘>{{nextMonth.weekDay}}</view>
        <view class=‘fs-32 mt-3‘>{{nextMonth.day}}</view>
      </view>
    </scroll-view>
  </view>
</view>

wxss:

.day-wrap{
  background-color: #fff;
  padding-top: 10px;
  padding-bottom: 10px;
}
.month{
  padding: 0 15px;
}

.day-list-scroll{
  white-space:nowrap;
}
.day-item{
  padding: 2px 8px;
  margin-right:15px;
  text-align: center;
  display: inline-block;
  vertical-align: middle
}
.day-item.weekday{
  background-color: #f2f2f2;
}
.day-item.today{
  background-color: #ffdee8;
  color: #ff5e2f
}

Happy Ending~



原文地址:https://www.cnblogs.com/sese/p/11137401.html

时间: 2024-08-13 11:00:00

微信小程序——获取当天的前一个月至后一个月的相关文章

微信小程序获取输入框(input)内容

微信小程序---获取输入框(input)内容 wxml <input placeholder="请输入手机号码" maxlength="11" type="tel" bindinput="getInput" /> js Page({ data:{ getInput: null }, getInput:function(){//方法1 this.data.getInput = e.detail.value; }, /

微信小程序-获取用户信息和openid,session_key,

1:微信小程序获取用户信息:比如常用的 avatarUrl (用户头像),nickName (用户名称) 等等, (1):获取用户信息调用 wx.getUserInfo 代码如下: 直接请求接口就可以了,随后把数据存放到storage中,下次直接取 就不用再请求接口,, 2:获取 openid (1):请求wx.login 接口,代码如下: url:是微信提供的 appid:是小程序的appid secret:是小程序开发设置的 AppSecret 只要获取到这两项,用户信息可以用于页面,ope

微信小程序-获取当前位置和城市名

微信小程序-获取当前城市位置 1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting: 2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数): 3,微信没有将经纬度直接转换为地理位置,借用腾讯位置服务中关于微信小程序的地理转换JS SDK 的API(返回信息中包括国家,省,市,区,经纬度等地理位置)步骤描述清楚以后,下面就开始按步骤操作了:(本文仅仅讲述如何获取用户地理位置的授权) 图示为获取用户地理位置授权弹窗 在用户首次进入某页面(

微信小程序 获取用户信息 encryptData解密 C#版本

最近学习小程序开发,需要对encryptData解密,获取用户信息,官方源码没有C#版本,网上的资料比较杂,有的使用还有问题,下面贴一下自己亲试可以使用的一个源码 1.code 换取 session_key 前端先调 wx.login 得到code传输到后端,后端通过接口 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authoriza

微信小程序 获取用户openid

1,可以在小程序app.js入口文件中放入登录代码 wx.login({ success: res => { // 登录注册接口 if (res.code) { // 调用服务端登录接口,发送 res.code 到服务器端换取 openId, sessionKey, unionId并存入数据库中 } else { console.log('登录失败!' + res.errMsg) } } }); 2,服务端PHP,小程序获取openid接口 // 获取openid function getOpe

微信小程序获取登录手机号

小程序获取登录用户手机号. 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发. 首先,放置一个 button 按钮,将 button 的 open-type 的属性值设为 getPhoneNumber . 当用户点击并通过之后,通过绑定的事件获取微信服务器返回过来的加密数据,再根据 session_key 和 app_id 通过后台解密就可以获取手机号啦. 说到这,就上码吧!!! 1 <!--index.wxml--&g

微信小程序获取用户手机号详解

最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1.首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话密钥). 2.拿到jscode后,将其发送给服务端,服务端拿它与微信服务端做交互获取openid和sessionkey.具体获取方法如下: (1)需要写一个HttpUrlConnection工具类: <span style="font-size:18px;">public cl

微信小程序~获取位置信息

微信小程序提供的getlocation来获取用户的定位,能够得到用户的经纬度信息 (注:getloaction需要用户授权scope.userLocation)结合map组件能够得到用户的详细定位 <map id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" show-location style="width: 100%;

微信小程序获取国外今日天气预报信息接口

使用天气API的国外今日天气预报接口制作 返回json预览 { cityid: "601010100", city: "堪培拉", cityEn: "Canberra", country: "澳大利亚", countryEn: "Australia", update_time: "2019-04-24 18:00:00", wea: "晴", wea_img: &qu