万年历的vue实现

2019-08-28  本文已影响0人  smartfeng
一、实现原理
万年历

三个要素:

<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
上一篇 下一篇

猜你喜欢

热点阅读