汉子时钟

汉子时钟

 <div id="d"></div>
<script>
    // 思路
    // 定义一个函数,获取当前时间的数据信息
    // 需要将数值,转化为对应的汉字
    // 需要有两个函数,一个是专门转化年份的函数,另一个是转化其他时间的函数
    // 年份中,必须要添加 汉字 十 

    d.innerHTML = setTime();
    setInterval( function(){
        d.innerHTML = setTime();
    } , 1000)




    function setTime(){
        // 创建当前时间对象
        var d = new Date();

        // 获取时间信息,年,月,日,星期,时,分,秒

        var y = d.getFullYear();
        var month = d.getMonth()+1;
        var day = d.getDate();
        var w = d.getDay();
        var h = d.getHours();
        var m = d.getMinutes();
        var s = d.getSeconds();

        // 将星期的数值,转化为中文
        var arr = ['日','一','二','三','四','五','六'];
        // 将星期获取的数值,作为索引下标,获取对应的汉字

        // 将年份转化为中文汉字,将获取到的年份作为函数的参数
        y = getYearStr(y);

        // 其他时间,转化为中文汉字,将其他时间作为函数的参数
        month = getTimeStr(month);
        day = getTimeStr(day);
        h = getTimeStr(h);

        // 分钟,秒,多拼接一个零汉字
        if(m < 10){
            m = '零' + getTimeStr(m)
        }else{
            m = getTimeStr(m);
        }

        if(s < 10){
            s = '零' + getTimeStr(s);
        }else{
            s = getTimeStr(s);
        }
        
        

        return `当前时间是:${y}年,${month}月,${day}号,星期${arr[w]},${h}点,${m}分,${s}秒`;
    }

    // 需要参数,是要转化的年份
    function getYearStr(year){
        // 首先,年份是一个4位数值,需要获取每一位上的阿拉伯数字
        // 在将这些阿拉伯数字,转化为对应的汉字

        // 如果年份是负数,表示公元前
        // 如果是负数,不能作为索引下标,要转化为整数
        var str = '';
        if(year < 0 ){
            // 如果是负数年份,对这个年份取绝对值
            year = Math.abs(year);
            str = '公元前';
        }

        /*
        方法1,通过获取4位数值,获取字符串

        // 第一位是除以1000,获取整数部分
        var a = parseInt( year / 1000 );
        // 第二位获取方式:
        //    方法1: (年份 - 第一位数值*1000) / 100 取整 
        //    方法2: (年份 % 1000) / 100 取整 
        var b = parseInt( (year % 1000 ) / 100 ); 
        // 第三位获取方式:
        //    方法1: (年份 - 第一位数值*1000 - 第二位数值*100) / 10 取整
        //    方法2: (年份 % 100) / 10 取整
        var c = parseInt( (year % 100) / 10 );
        // 第四位获取方式
        //    方法1: 年份 - 第一位数值*1000 - 第二位数值*100 - 第三位*10
        //    方法2: 年份 % 10
        var d = year % 10;

        


        // 需要将数值,转化为对应的汉字内容
        // 将数值看成索引下标,建立对应的数组,来获取中文
        var arr = ['零','一','二','三','四','五','六','七','八','九'];

        // 返回数值对应的字符串汉字

        // 如果是正常年份,拼接的是空字符串
        // 如果是公元前,会拼接公元前3个字

        return `${str}${arr[a]}${arr[b]}${arr[c]}${arr[d]}`;

        */



        // 方法2,通过循环

        var arr = ['零','一','二','三','四','五','六','七','八','九'];

        // 1,将年份数值,转化为年份字符串
        year = year.toString();

        // 2,循环遍历字符串,获取每一位上的字符,从数组中,获取对应的汉字,进行拼接
        // 定义空字符串,存储年份字符串
        var s = '';
        // 字符串只能使用for...in循环
        for(var key in year){
            // year[key] 是对应的年份的数值
            // arr[ year[key] ] 是将年份数值,作为索引下标,获取对应的汉字
            // 将获取的结果,拼接入变量中
            s += arr[year[key]];
        }
        // 定义返回值字符串
        return `${str}${s}`;
    }


    // 其他事件,数值范围是0-59之间
    // 将数值分成4类
    // 1,  0 - 10的数值   转化为 一位汉字
    // 2,  20,30,40,50    可以被10整除的数值, 十位数值对应汉字 拼接 '十'
    // 3,  11-19之间      11-19范围的数值 , '十' 拼接 个位数字对应的汉字
    // 4,  21-29,31-39,41-49,51-59  十位对应汉字 拼接 '十' 拼接 个位对应汉字

    /*  时间还凑合,要是银行存款,你能写到退休
        var arr = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二十一','二十二','二十三','二十四','二十五','二十六','二十七','二十八','二十九','三十','三十一','三十二','三十三','三十四','三十五','三十六','三十七','三十八','三十九','四十','四十一','四十二','四十三','四十四','四十五','四十六','四十七','四十八','四十九','五十','五十一','五十二','五十三','五十四','五十五','五十六','五十七','五十八','五十九']
    
    */ 


    function getTimeStr(time){
        // 定义汉字数组
        var arr = ['零','一','二','三','四','五','六','七','八','九','十'];

        // 根据4种分类,返回同的字符串

        // 时间数值 小于等于 10  转化1位汉字
        if(time <= 10){
            return arr[time];

        // 时间数值 20,30,40,50 可以被10整除 转化 十位数值汉字 拼接 '十'
        }else if(time % 10 == 0){
            // 获取十位数值
            var a = parseInt( time / 10);
            // 返回值,十位数值对应汉字拼接'十'
            return `${arr[a]}十`;

        // 时间数值 11 - 19  转化 '十' 拼接 个位数值汉字
        }else if(time >= 11 && time <= 19){
            // 获取个位数值
            var b = parseInt( time % 10);
            // 返回值,'十'拼接个位数值对应汉字
            return `十${arr[b]}`;

        // 时间数值 21-29,31-39,41-49,51-59 
        // 十位数值汉字 拼接 '十' 拼接 个位数值汉字
        }else{
            // 获取十位
            var a = parseInt( time / 10);
            // 获取个位
            var b = parseInt( time % 10);
            return `${arr[a]}十${arr[b]}`;
        }   






    }


</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值