汉子时钟
<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>
转载请注明原文地址:https://blackberry.8miu.com/read-9298.html