在写日历组件和旅行相关频道开发的过程中,很多需要地方需要和日期对象打交道。拿京东旅游首页来说, 左上角的搜索框就包含了许多日期相关的交互逻辑,它包含了机票,酒店,度假等,这些都含有出发日期,到达日期等。

里面还包含了一个日期组件,在用户选择完出发日期后,会自动把到达日期定位在出发日期的下一天。

又如机票低价日历

还有度假的这种特殊日历

以下是经常需要用到日期相关小函数

一、 判断闰年
这个函数在日历组件是必须要的,闰年的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;
}

 

日期相关的小函数汇总相关推荐

  1. 41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数

    41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数 格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函 ...

  2. 用shell脚本计算日期的小函数们

    参考:http://qiuqiang1985.iteye.com/blog/1647761 参考:http://my.oschina.net/SmileWolf/blog/159624 当你遇到一个d ...

  3. 微信小程序image组件开发程序以及相关图片问题参考资料汇总

    微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...

  4. mySQL日期函数并运行_mysql日期相关的函数

    1.获取当前时间: /** 获得当前日期+时间(date + time)函数:now(), 常用 **/ select now() fromdual;/** 获取当前时间戳,current_times ...

  5. mysql 时间函数大全_mysql常用的日期函数汇总

    最近做统计时经常用到的几个mysql函数: 1. UNIX_TIMESTAMP() 该函数返回1970到现在的秒数,括号内也可以带参数,即返回1970年到指定时间段的秒数,注意是秒数,常用java的兄 ...

  6. Opencv的使用小教程1——Opencv基础函数汇总

    Opencv的使用小教程1--Opencv基础函数汇总 1.VideoCapture 2.imread 3.resize 4.clone 5.cvtColor 6.Scalar 7.获取像素点的值 8 ...

  7. php根据日期判断星座if函数,js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)...

    本文最后更新于2019-07-01,已超过 1年没有更新,如果文章内容.图片或者下载资源失效,请留言反馈,我会及时处理,谢谢! 温馨提示:本文共2388个字,读完预计6分钟. 摘要: 根据生日的月份和 ...

  8. Opencv的使用小教程2——Opencv常用图像处理函数汇总

    Opencv的使用小教程2--Opencv常用图像处理函数汇总 1.blur 2.GaussianBlur 3.medianBlur 4.bilateralFilter 5.腐蚀和膨胀 6.morph ...

  9. excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇

    在我们的实际工作中,经常需要用到日期函数.日期函数那么多,你还只会用函数TODAY吗?那你就OUT了.今天一起来看下常用日期函数的用法! 1.DATE 函数DATE:返回在日期时间代码中代表日期的数字 ...

  10. hive函数-日期函数汇总

    1.unix时间戳转日期函数 语法:from_unixtime(bigint unixtime[, string format]) 说明:转化UNIX时间戳(从1970-01-01 00:00:00 ...

最新文章

  1. 2021襄阳谷城高考成绩查询,2021高考襄阳谷城县考生求助电话
  2. Uncaught ReferenceError: angular is not defined
  3. PAT甲级1085 Perfect Sequence :[C++题解]双指针
  4. Nginx 服务优化与防盗链
  5. JSON格式以及基本用法
  6. java如何实现信号量_使用二进制信号量实现通用信号量
  7. rtthread pwm设备控制led小灯亮度
  8. IRF之LACP-MAD检测
  9. 已有打开的与此命令相关联的 DataReader,必须首先将它关闭
  10. PHP中的simplehtmldom学习
  11. 博弈论——选举/投票(voting)
  12. Spring之Bean的作用域、使用外部属性文件、mchange-commons-java-0.2.11.jar下载
  13. win7虚拟磁盘服务器,深度Win7 64位旗舰版系统如何创建虚拟磁盘
  14. (转)DirectoryEntry的使用
  15. 2018年11月黑马java
  16. 计算机无法查看隐藏文件夹,电脑里的隐藏文件夹怎么显示不出来啊?
  17. VC浏览器的定制与扩展
  18. 虚幻4 UE4 蓝图C++混合编程
  19. 华为交换机 access,trunk,hybrid理解,需一点基础,应该是最完整的
  20. 雷达监控与视频监控性能对比分析

热门文章

  1. html5 sha1,JavaScript 实现的base64加密、md5加密、sha1加密及AES加密
  2. c语言语句结束的标准,C语言的语句要求以哪种符号结束?
  3. 【Gym-101908 L】Subway Lines【树上两条路径交】
  4. MATLAB绘制微分方程的相图/方向场/向量场
  5. 思科交换机(cisco)开启802.1x认证
  6. Shellex:针对shellcode的转换与处理工具
  7. TIG:一款威胁情报收集小工具
  8. 5年级用计算机器探索规律,《小数除法》用计算器探索规律
  9. html如何判断ie版本,在html中判断IE浏览器的版本
  10. 合肥青少年信息学计算机竞赛试题,合肥市第三十一届青少年信息学(计算机)竞赛 小学组试题...