日期相关的小函数汇总
在写日历组件和旅行相关频道开发的过程中,很多需要地方需要和日期对象打交道。拿京东旅游首页来说, 左上角的搜索框就包含了许多日期相关的交互逻辑,它包含了机票,酒店,度假等,这些都含有出发日期,到达日期等。
里面还包含了一个日期组件,在用户选择完出发日期后,会自动把到达日期定位在出发日期的下一天。
又如机票低价日历
还有度假的这种特殊日历
以下是经常需要用到日期相关小函数
一、 判断闰年
这个函数在日历组件是必须要的,闰年的2月是29天,非闰年是28天
/** 判断闰年* @param {Number} 年* @return {Blooean}*/
function isLeapYear(year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
}
isLeapYear(2015) // false
isLeapYear(2016) // true
二、补齐月,日数字位数
通过Date对下的getMonth,getDate返回的数字如果是10以下的需要在前面补齐一个0。这里需要注意的是getMonth返回的月份是从0开始的,即0代表1月份,1代表2月份,依次类推。
/** 补齐月,日数字位数* @param {number|string} n 需要补齐的数字* @return {string} 补齐两位后的字符*/
function getTwoBit(n) {return (n > 9 ? '' : '0') + n
}
getTwoBit(3) // '03'
getTwoBit(9) // '09'
getTwoBit(10) // '10'
getTwoBit(11) // '11'
三、Date对象转成日期格式字符串
有两种格式"2015-01-22" 和 "2015/01/23"
/** 日期对象转成字符串* @param {Date} new Date()* @split {String} "-" 或 "/"* @return {String} "2014-12-31" */
function date2Str(date, split) {split = split || '-'var y = date.getFullYear()var m = getTwoBit(date.getMonth() + 1)var d = getTwoBit(date.getDate())return [y, m, d].join(split)
}
四、日期格式字符串转成Date对象
/** 日期字符串转成Date对象* @param {String} str* "2014-12-31" * "2014/12/31"* @return {Date} */
function str2Date(str) {var reDate = /^\d{4}\-\d{1,2}\-\d{1,2}/if (reDate.test(str)) {str = str.replace(/-/g, '/')}return new Date(str)
}
这里需要注意下,不能直接 new Date('2014-12-31'),横线间隔的日期格式字符串作为参数传给Date构造器不是所有浏览器都支持。
五、根据数字返回特定的天
比如旅行频道出发日期一般是第二天(明天),返程日期是第三天(后天)
这个函数根据数字返回特定的日期字符串
/** 返回日期格式字符串* @param {Number} 0返回今天的日期、1返回明天的日期,2返回后天得日期,依次类推* @return {string} '2014-12-31'*/
function getSpecDay(i) {i = i || 0var date = new Datevar diff = i * (1000 * 60 * 60 * 24)date = new Date(date.getTime() + diff)return date2Str(date)
}
getSpecDay(0) // 2014-12-31
getSpecDay(1) // 2015-01-01
六、根据Date对象获取星期
有的需求要显示的是 “周三”,有的则是 “星期三”
/** 根据Date对象获取周几* @param date {Date|String} 如 '2014-12-22'* @param isFormal {Boolean} * @return '周一' 或 '星期一'*/
function getWeekByDate(date, isFormal) {var obj = nullvar weekArr1 = ['周日','周一','周二','周三','周四','周五','周六']var weekArr2 = ['星期日', '星期一','星期二','星期三','星期四','星期五','星期六']if (typeof date == 'string') {obj = str2Date(date)} else if (date instanceof Date) {obj = date}var num = obj.getDay()return isFormal ? weekArr2[num] : weekArr1[num]
}
七、根据年获取生肖
/** 根据年获取生肖** **参数*** year {number} 年** **示例*** getAnimal(1980) // "猴"* getAnimal(1981) // "鸡"* getAnimal(2013) // "蛇"*/
function getAnimal(year) {var animals = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪'];var i = (year - 4) % 12;return animals[i];
}
八、根据年月返回该月的两个节气,一个公历月有两个节气
/** 根据年月返回该月的两个节气,一个公历月有两个节气* * **节气算法*** http://ershisijieqi.baike.com/article-284624.html* http://www.azg168.com/huangli/24sijieqi/28337.html* http://blog.csdn.net/orbit/article/details/7910220** **参数*** year {number} 年 * month {number} 月** **返回*** object* * **示例*** getSolarTerm(2016, 4); // {day1: 4, term1: "清明", day2: 19, term2: "谷雨"}**/
function getSolarTerm(year, month) {var solarTerm = ["小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"];var termInfo = [0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758];// 返回某年的第n个节气为几日(从0小寒起算)function computeTermDay(y, n) {var d = new Date((31556925974.7 * (y - 1900) + termInfo[n] * 60000) + Date.UTC(1900, 0, 6, 2, 5));return d.getUTCDate();}// month 转为 [0-11] 范畴month = month - 1;// 计算节气var n1 = month * 2;var n2 = month * 2 + 1;// day1, day2 为当月的两个节气日var day1 = computeTermDay(year, n1);var day2 = computeTermDay(year, n2);// 当月的两个节气名称var term1 = solarTerm[n1];var term2 = solarTerm[n2];// 返回结果return {day1: day1,term1: term1,day2: day2,term2: term2};
}
九、获取Y年的清明节是哪一天
/** 获取Y年的清明节是哪一天* * **参数*** yare {number} 年** **示例*** getQingMing(2015); // 0405* getQingMing(2016); // 0404*/
function getQingMing(year) {// [Y*D+C]-L// Y=年数后2位,D=0.2422,L=闰年数,21世纪C=4.81,20世纪=5.59var d = 0.2422;var c = 4.81;var y = (year + '').substr(2);var day = parseInt(y*d+c) - parseInt(y/4);return day;
}
日期相关的小函数汇总相关推荐
- 41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数
41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数 格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函 ...
- 用shell脚本计算日期的小函数们
参考:http://qiuqiang1985.iteye.com/blog/1647761 参考:http://my.oschina.net/SmileWolf/blog/159624 当你遇到一个d ...
- 微信小程序image组件开发程序以及相关图片问题参考资料汇总
微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...
- mySQL日期函数并运行_mysql日期相关的函数
1.获取当前时间: /** 获得当前日期+时间(date + time)函数:now(), 常用 **/ select now() fromdual;/** 获取当前时间戳,current_times ...
- mysql 时间函数大全_mysql常用的日期函数汇总
最近做统计时经常用到的几个mysql函数: 1. UNIX_TIMESTAMP() 该函数返回1970到现在的秒数,括号内也可以带参数,即返回1970年到指定时间段的秒数,注意是秒数,常用java的兄 ...
- Opencv的使用小教程1——Opencv基础函数汇总
Opencv的使用小教程1--Opencv基础函数汇总 1.VideoCapture 2.imread 3.resize 4.clone 5.cvtColor 6.Scalar 7.获取像素点的值 8 ...
- php根据日期判断星座if函数,js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)...
本文最后更新于2019-07-01,已超过 1年没有更新,如果文章内容.图片或者下载资源失效,请留言反馈,我会及时处理,谢谢! 温馨提示:本文共2388个字,读完预计6分钟. 摘要: 根据生日的月份和 ...
- Opencv的使用小教程2——Opencv常用图像处理函数汇总
Opencv的使用小教程2--Opencv常用图像处理函数汇总 1.blur 2.GaussianBlur 3.medianBlur 4.bilateralFilter 5.腐蚀和膨胀 6.morph ...
- excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
在我们的实际工作中,经常需要用到日期函数.日期函数那么多,你还只会用函数TODAY吗?那你就OUT了.今天一起来看下常用日期函数的用法! 1.DATE 函数DATE:返回在日期时间代码中代表日期的数字 ...
- hive函数-日期函数汇总
1.unix时间戳转日期函数 语法:from_unixtime(bigint unixtime[, string format]) 说明:转化UNIX时间戳(从1970-01-01 00:00:00 ...
最新文章
- 2021襄阳谷城高考成绩查询,2021高考襄阳谷城县考生求助电话
- Uncaught ReferenceError: angular is not defined
- PAT甲级1085 Perfect Sequence :[C++题解]双指针
- Nginx 服务优化与防盗链
- JSON格式以及基本用法
- java如何实现信号量_使用二进制信号量实现通用信号量
- rtthread pwm设备控制led小灯亮度
- IRF之LACP-MAD检测
- 已有打开的与此命令相关联的 DataReader,必须首先将它关闭
- PHP中的simplehtmldom学习
- 博弈论——选举/投票(voting)
- Spring之Bean的作用域、使用外部属性文件、mchange-commons-java-0.2.11.jar下载
- win7虚拟磁盘服务器,深度Win7 64位旗舰版系统如何创建虚拟磁盘
- (转)DirectoryEntry的使用
- 2018年11月黑马java
- 计算机无法查看隐藏文件夹,电脑里的隐藏文件夹怎么显示不出来啊?
- VC浏览器的定制与扩展
- 虚幻4 UE4 蓝图C++混合编程
- 华为交换机 access,trunk,hybrid理解,需一点基础,应该是最完整的
- 雷达监控与视频监控性能对比分析
热门文章
- html5 sha1,JavaScript 实现的base64加密、md5加密、sha1加密及AES加密
- c语言语句结束的标准,C语言的语句要求以哪种符号结束?
- 【Gym-101908 L】Subway Lines【树上两条路径交】
- MATLAB绘制微分方程的相图/方向场/向量场
- 思科交换机(cisco)开启802.1x认证
- Shellex:针对shellcode的转换与处理工具
- TIG:一款威胁情报收集小工具
- 5年级用计算机器探索规律,《小数除法》用计算器探索规律
- html如何判断ie版本,在html中判断IE浏览器的版本
- 合肥青少年信息学计算机竞赛试题,合肥市第三十一届青少年信息学(计算机)竞赛 小学组试题...