日历

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

这是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

    });

  },

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容