日历

作者: 玲珑咖啡_47d1 | 来源:发表于2019-05-13 11:42 被阅读0次

我遇到了小程序要用日历的需求,本来想省事,在网上找插件用,看了好多,感觉好麻烦,就自己写了有个,功能比较简单,实现基本需求!

这是data数据

data: {

    //当前时间

    currentime:[],

    //月份日历

    currentarr: [],

  },

页面

<view class='goouc_calendar_wrap'>

  <view class='goouc_calendar_tit'>

    <view class='lt' bindtap='promonth'>«</view>

    {{currentime[0]}}-{{currentime[1]}}

    <view class='rt' bindtap='nextmonth'>»</view>

  </view>

  <view class='goouc_calendar_xq'>

    <view>日</view>

    <view>一</view>

    <view>二</view>

    <view>三</view>

    <view>四</view>

    <view>五</view>

    <view>六</view>

  </view>

  <view class='goouc_date'>

    <view class='goouc_view' wx:for="{{currentarr}}" wx:key="{{index}}">

      <image class='{{index == 4 ? "active":""}}' src='../../images/rl-bg.png'></image>

      {{item}}

    </view>

  </view>

</view>

css

.goouc_calendar_wrap {

  width: 92%;

  background: rgba(255, 255, 255, 1);

  box-shadow: 0px 1px 22px 0px rgba(53, 146, 255, 0.33);

  border-radius: 10px;

  margin-top: -46px;

  margin-left: 4%;

  padding-bottom: 10px;

  box-sizing: border-box;

  z-index: 9;

}

.goouc_calendar_tit {

  width: 100%;

  height: 44px;

  line-height: 44px;

  text-align: center;

  font-size: 17px;

  font-weight: 500;

  color: rgba(17, 17, 17, 1);

  border-bottom: 1px solid #ccc;

  position: relative;

}

.goouc_calendar_tit .lt {

  position: absolute;

  width: 30px;

  left: 30%;

  top: 0;

}

.goouc_calendar_tit .rt {

  position: absolute;

  width: 30px;

  right: 30%;

  top: 0;

}

.goouc_calendar_xq {

  width: 100%;

  height: 44px;

  line-height: 44px;

  text-align: center;

  font-size: 15px;

  font-weight: 500;

  color: rgba(17, 17, 17, 1);

  display: flex;

  justify-content: space-around;

}

.goouc_calendar_xq>view {

  width: 14.28%;

  height: 44px;

  line-height: 44px;

}

.goouc_date {

  width: 100%;

  text-align: center;

  font-size: 17px;

  /* font-weight:500; */

  color: rgba(17, 17, 17, 1);

  display: flex;

  justify-content: space-around;

  flex-wrap: wrap;

}

.goouc_date .goouc_view {

  width: 14.28%;

  height: 44px;

  line-height: 44px;

  position: relative;

}

.goouc_date .goouc_view image {

  display: none;

  position: absolute;

  width: 24px;

  height: 24px;

  top: 50%;

  left: 50%;

  transform: translate(-50%, -50%);

  -webkit-transform: translate(-50%, -50%);

}

.goouc_date .goouc_view image.active {

  display: block;

}

.goouc_date::after {

  content: '';

  flex: auto;

}

js

//获取当前时间函数

  currentime: function() {

    var date = new Date();

    var y = date.getFullYear();

    var m = date.getMonth() + 1;

    var d = date.getDate();

    return [y, m, d];

  },

  // 获取时间是星期几

  nyr: function(y, m, d) {

    // 求解cy年cm月cd日是星期几,parseInt代表取整 d=1是去每个月第一天

    var cc = parseInt(y / 100); //c

    var cy = y - cc * 100; //y

    var cm = m; //m

    var cd = d; //d

    // 某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算

    if (m == 1 || m == 2) {

      cc = parseInt((y - 1) / 100);

      cy = y - 1 - cc * 100;

      cm = 12 + m;

    }

    //w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

    // var csum = y + [y / 4] + [c / 4] - 2c+[26(m + 1)/10]+d-1;

    var csum = cy + parseInt(cy / 4) + parseInt(cc / 4) - 2 * cc + parseInt(26 * (cm + 1) / 10) + cd - 1;

    // 注意使用蔡勒公式时出现负数情况

    if (csum < 0) {

      var fd = parseInt((csum % 7 + 7) % 7);

    } else {

      var fd = parseInt(csum % 7);

    }

    var arr = [];

    switch (fd) {

      case 0:

        arr = [];

        break;

      case 1:

        arr = [''];

        break;

      case 2:

        arr = ['', ''];

        break;

      case 3:

        arr = ['', '', ''];

        break;

      case 4:

        arr = ['', '', '', ''];

        break;

      case 5:

        arr = ['', '', '', '', ''];

        break;

      case 6:

        arr = ['', '', '', '', '', ''];

        break;

    }

    return arr;

  },

  //塞1-28/29/30/31

  filldate: function (year, month) {

    var month = month;

    var year = year;

    var cond1 = year % 4 == 0; //条件1:年份必须要能被4整除

    var cond2 = year % 100 != 0; //条件2:年份不能是整百数

    var cond3 = year % 400 == 0; //条件3:年份是400的倍数

    //当条件1和条件2同时成立时,就肯定是闰年,所以条件1和条件2之间为“与”的关系。

    //如果条件1和条件2不能同时成立,但如果条件3能成立,则仍然是闰年。所以条件3与前2项为“或”的关系。

    //所以得出判断闰年的表达式:

    var cond = cond1 && cond2 || cond3;

    if (cond) {

      var daynum = 29;

    } else {

      var daynum = 28;

    }

    var montharr = [];

    switch (month) {

      case 2:

        for (var i = 0; i < daynum; i++) {

          montharr.push(i + 1);

        }

        break;

      case 4:

        for (var i = 0; i < 30; i++) {

          montharr.push(i + 1);

        }

        break;

      case 6:

        for (var i = 0; i < 30; i++) {

          montharr.push(i + 1);

        }

        break;

      case 9:

        for (var i = 0; i < 30; i++) {

          montharr.push(i + 1);

        }

        break;

      case 11:

        for (var i = 0; i < 30; i++) {

          montharr.push(i + 1);

        }

        break;

      default:

        for (var i = 0; i < 31; i++) {

          montharr.push(i + 1);

        }

    }

    return montharr;

  }

onLoad: function(options) {

    // 当前时间

    var currentime = this.currentime();

    // 计算出当月的日期塞进数组

    var currentarr = this.nyr(currentime[0], currentime[1], 1).concat(this.filldate(currentime[0], currentime[1]));

    this.setData({

      currentime: currentime,

      currentarr: currentarr

    }); 

    //console.log(this.nyr(currentime[0], currentime[1], 1), this.currentime(), currentarr);             

  },

//上个月

promonth() {

    var currentime = this.data.currentime;

    // 当前时间

    currentime[1]--;

    if (currentime[1] <= 0) {

      currentime[1] = 12;

      currentime[0]--;

    }

    // 计算出当月的日期塞进数组

    var currentarr = this.nyr(currentime[0], currentime[1], 1).concat(this.filldate(currentime[0], currentime[1]));

    this.setData({

      currentime: currentime,

      currentarr: currentarr

    });

  },

//下个月

nextmonth() {

    var currentime = this.data.currentime;

    // 当前时间

    currentime[1]++;

    if (currentime[1]>12){

      currentime[1] = 1;

      currentime[0]++;

    }

    // 计算出当月的日期塞进数组

    var currentarr = this.nyr(currentime[0], currentime[1], 1).concat(this.filldate(currentime[0], currentime[1]));

    this.setData({

      currentime: currentime,

      currentarr: currentarr

    });

  },

相关文章

  • RCalendarPicker 日历控件 ,日历选择控件,日历,

    RCalendarPicker RCalendarPicker 日历控件 ,日历选择控件,日历,日期选择 Prev...

  • 手绘风日历素材

    1/扁平风日历 2/生活小元素日历 3/动物日历 4/萌猪日历

  • 【基本扩展模块】33、时间相关:calendar模块

    目录一、制作电子日历二、将日历列表化三、与日历相关的计算 一、制作电子日历 calendar模块跟日历相关的若干函...

  • 日历

    这几天没有来由地想起以前学习的冯骥才先生的《日历》,便回过头又去看了一次这篇文章,进而想到朱自清先生的《匆...

  • 日历

    日历 抚摩旧日历上斑驳的月光 令我想起黄河的流淌 站在开封与汴梁之间 宋都故地听不见隐秘的交谈 关关雎鸠,在河之洲...

  • 日历

    最近买了故宫日历,很好看的一本。 对于老式台历的记忆,还停留在奶奶家那种手撕的日历里。薄薄的一张纸上印满了字,什么...

  • 日历

    时间从我们身边流走 感觉不到少了什么 只是一张日历而已 薄薄的一页纸 可是一年下来 你才突然发现厚厚的一本书 什么...

  • 日历

    我们总会说再见的 清晨 日暮 或夜晚 好像日历 日期都过了那么久了 但还是会有一个舍不得的日期 是一个过不去的梗 ...

  • 日历

    时间管理的工具,最经典的非“日历”莫属,从古至今它的身影我们随处可见。 我们可以使用的日历有两种: 一种是纸质日历...

  • 日历

    家中常备一日历, 总见靠墙相偎依。 若挑时辰查凶吉, 移步面前识各一。

网友评论

      本文标题:日历

      本文链接:https://www.haomeiwen.com/subject/jufjuqtx.html