美文网首页
万年历的vue实现

万年历的vue实现

作者: smartfeng | 来源:发表于2019-08-28 21:31 被阅读0次
一、实现原理
万年历

三个要素:

  • 本月一号星期几,比如这个月1号星期五
  • 上个月有多少天,上个月有30天
  • 本月有多少天,这个月有31天


    分析图

    2044年4月1日到底星期几呢?


    控制台输出
    JS内置了一个对象叫做Date,可以计算日期。注意,月份从0开始。
    调用new Date(),格式 new Date(年, 月份 - 1, 日)

    可以打点调用getDay(),即可迅速获得那一天的星期几。


    image.png
    image.png
    有个好玩的东西
    2019年35月87日
    image.png
    JS的日期,能够自动进位,特别厉害。
    image.png
<template>
    <div>
        <table>
            <tr>
                <th>日</th>
                <th>一</th>
                <th>二</th>
                <th>三</th>
                <th>四</th>
                <th>五</th>
                <th>六</th>
            </tr>
            <tr v-for="i in 6" :key="i">
                <td v-for="j in 7" :key="j">
                    {{jisuan[
                        (i-1) * 7 +  (j-1)
                    ]}}
                </td>
            </tr>
        </table>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                year: 2019,
                month: 8
            }
        },
        computed: {
            jisuan() {
                var benyueyihaoxingqiji = new Date(this.year, this.month - 1, 1).getDay();
                var shanggeyuejitian = new Date(this.year, this.month, 0).getDate();
                var benyueyoujitian = new Date(this.year, this.month, 0).getDate();
                
                var arr = [];
                for(let i = 0; i < benyueyihaoxingqiji; i++){
                    arr.unshift(shanggeyuejitian - i);
                }
                for(let i = 1; i <= benyueyoujitian; i++){
                    arr.push(i);
                }
                var n = 1;
                while(arr.length<42){
                    arr.push(n++);
                }
                return arr;
            }
        }
    }
</script>

<style>
    table{
        border-collapse: collapse;
    }
    td,th{
        border: 1px solid #000;
        padding: 10px 20px;
    }
</style>
image.png

高级版

<template>
    <div>
        <select name="" id="" v-model="year">
            <option :value="1900+i" v-for="i in 200" :key="i">{{1900+i}}</option>
        </select>
        <select name="" id="" v-model="month">
            <option :value="i" v-for="i in 12" :key="i">{{i}}</option>
        </select>
        <table>
            <tr>
                <th>日</th>
                <th>一</th>
                <th>二</th>
                <th>三</th>
                <th>四</th>
                <th>五</th>
                <th>六</th>
            </tr>
            <tr v-for="i in 6" :key="i">
                <td v-for="j in 7" :key="j">
                    <p>{{jisuan[(i-1)*7+(j-1)].gongli}}</p>
                    <p>{{
                            jisuan[(i-1)*7+(j-1)].nongli.term
                            ?
                            jisuan[(i-1)*7+(j-1)].nongli.term
                            :
                            jisuan[(i-1)*7+(j-1)].nongli.dayCn
                        }}</p>

                </td>
            </tr>
        </table>
    </div>
</template>

<script>
    import solarlunar from 'solarLunar';
    export default {
        data() {
            return {
                year: 2019,
                month: 8
            }
        },
        computed: {
            jisuan() {
                // console.log(solarlunar.solar2lunar(2019, 8, 28))
                var benyueyihaoxingqiji = new Date(this.year, this.month - 1, 1).getDay();
                var shanggeyueyoujitian = new Date(this.year, this.month - 1, 0).getDate();
                var benyueyoujitian = new Date(this.year, this.month, 0).getDate();
                var arr = [];
                for(let i = 0; i < benyueyihaoxingqiji; i++){
                    arr.unshift({
                        'gongli': shanggeyueyoujitian - i,
                        'nongli': solarlunar.solar2lunar(this.year, this.month - 1, shanggeyueyoujitian - i)
                    });
                }
                for(let i = 1; i <= benyueyoujitian; i++){
                    arr.push({
                        'gongli': i,
                        'nongli': solarlunar.solar2lunar(this.year, this.month, i)
                    });
                }
                var n = 1;
                while(arr.length<42){
                    arr.push({
                        'gongli': n,
                        'nongli': solarlunar.solar2lunar(this.year, this.month + 1, n)
                    });
                    n++;
                }
                return arr;
            }
        }
    }
</script>
image.png

相关文章

  • 万年历的vue实现

    一、实现原理 三个要素: 本月一号星期几,比如这个月1号星期五 上个月有多少天,上个月有30天 本月有多少天,这个...

  • 2018-12-01

    万年历查询(JavaScript实现) 实现的界面有点单调,查询功能已经实现,之后还可以添加一下其他功能。。 效果...

  • vue总结

    vue路由守卫 vue实现双向绑定原理 Vue生命周期: vue跨域方式 vue-router实现原理 vue-r...

  • 2018-12-24

    1,基于Vue.js、 iview实现的项目管理系统vue-projectManage: 基于Vue.js实现的项...

  • Vue2与Vue3区别

    1、 组件的懒加载 1.1 Vue2实现 1.2 Vue3实现

  • PHP快速入门之运算符和流程控制

    2.1 案例介绍 万年历的实现。万年历是可以按照相应的规则来显示每一天的属性,为我们生活提供服务的一种工具。 2....

  • Vue,和React,实现的双向数据绑定效果

    假设有这样的需求,用Vue和React,分别是怎么实现的呢? Vue的实现方法: Vue的实现方法是利用v-mod...

  • js、jQuery、Vue对比

    Javascript jQuery Vue vue可以实现追加

  • 深入Vue响应式原理

    1.Vue的双向数据绑定 参考 vue的双向绑定原理及实现Vue双向绑定的实现原理Object.definepro...

  • vue-Vue的watch实现原理及watch实现方式

    vue--Vue的watch实现原理及watch实现方式 参考: https://www.jianshu.com/...

网友评论

      本文标题:万年历的vue实现

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