平年:

  2月-->28天

  4,6,9,11月-->30天

  1,3,5,7,8,10,12月-->31天

闰年:

  2月-->29天

  4,6,9,11月-->30天

  1,3,5,7,8,10,12月-->31天

闰年的计算方式:

  1、年份/100

  2、如果 年份/100有余数 , 年份/4 没有余数   是闰年

       如果 年份/100没余数 , 年份/400 没有余数   是闰年

  1. function year(years){
  2. return years%100 == 0 ? (years%400 == 0 ? 1 : 0) : (years%4 == 0 ? 1 : 0);//判断闰年;如果是闰年返回1,平年返回0
  3. }
  4. function day(mouths, fn){//fn --> year()函数
  5. if(fn == 1 && mouths == 2){
  6. return 29;
  7. }else{
  8. if(mouths == 2){
  9. return 28;
  10. }else if(mouths == 4 || 6 || 7 || 9 || 11){//4 6 7 9 11 -> 30
  11. return 30;
  12. }else{
  13. return 31;
  14. }
  15. }
  16. }

下面是全部代码:

html:

  1. <div id="datebox"></div><!--选完日期后填入的地方-->
  2. <div style="display: flex;">
  3. <div class="years">
  4.  
  5. </div>
  6. <div class="mouth" style="display: none">
  7.  
  8. </div>
  9. <div class="day" style="display: none">
  10.  
  11. </div>
  12. </div>

css:

  1. <style>
  2. .years,.mouth,.day{
  3. width: 90px;
  4. height: 200px;
  5. overflow-y: scroll;
  6. }
  7. </style>

javascript:

  1. var startYear = 1918;
  2. var years = document.getElementsByClassName('years')[0];
  3. var mouth = document.getElementsByClassName('mouth')[0];
  4. var days = document.getElementsByClassName('day')[0];
  5. for(var k = startYear; k <= 2017; k++){
  6. var node = createNode(k);
  7. years.appendChild(node);
  8. }
  9. for(var m = 1; m <= 12; m++){
  10. var node = createNode(m);
  11. mouth.appendChild(node);
  12. }
  13. function createDay(option){
  14. for(var i = 1; i <= option; i++){
  15. var node = createNode(i);
  16. days.appendChild(node);
  17. }
  18. }
  19. function createNode (num){
  20. var node = document.createElement('a');
  21. node.innerHTML = num;
  22. node.style.display = 'block';
  23. return node;
  24. }
  25. function year(years){
  26. return years%100 == 0 ? (years%400 == 0 ? 1 : 0) : (years%4 == 0 ? 1 : 0);
  27. }
  28. function day(mouths, fn){
  29. if(fn == 1 && mouths == 2){
  30. return 29;
  31. }else{
  32. if(mouths == 2){
  33. return 28;
  34. }else if(mouths == 4 || 6 || 7 || 9 || 11){//4 6 7 9 11 -> 30
  35. return 30;
  36. }else{
  37. return 31;
  38. }
  39. }
  40. }
  41. years.addEventListener('click', function(e){
  42. var temps = [];
  43. temps.push(e.target.innerHTML);
  44. mouth.style.display = 'block';
  45. mouth.addEventListener('click', function(e){
  46. temps.push(e.target.innerHTML);
  47. days.style.display = 'block';
  48. createDay(day(temps[1], year(temps[2])));
  49. days.addEventListener('click', function(e){
  50. temps.push(e.target.innerHTML);
  51. var dates = temps[0] + '年' + temps[1] + '月' + temps[2] + '日';
  52. datebox.innerHTML = dates;
  53. this.style.display = 'none';
  54. mouth.style.display = 'none';
  55. years.style.display = 'none';
  56. })
  57. })
  58. })

纯js实现日期选取功能的更多相关文章

  1. 纯JS实现图片验证码功能并兼容IE6-8

    最近要搞一个图片验证码功能,但是又不想自己写后台代码.于是自己准备搞一个纯前端的验证码功能,于是网上搜索了一下,找到一个插件gVerify.js,简单好用,实现完美.不过后面接到说要兼容IE8,想想也 ...

  2. 纯js实现复制到剪贴板功能

    在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽.本文介绍的一款JS插件,实现了纯J ...

  3. jQuery+AJAX实现纯js分页功能

    使用jQuery的AJAX技术,在bootstrap的框架下搭建的纯js分页 bootstrap作为Twitter推的一款前端框架,效果个人还是觉得很不错的.这次只是拿来作为网页元素的css样式表使用 ...

  4. AJAX部分---对比js做日期的下拉选择 和 ajax做三级联动;

    js做日期选择: 实现当前年份的前5后5年的日期选择 实现功能:年份和月份页面加载完成使用JS循环添加,天数根据月份的变化动态添加改变 扩展功能:天数可以根据闰年平年变化 <body> & ...

  5. F2工作流引擎之-纯JS Web在线可拖拽的流程设计器(八)

          Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回.传阅.转交,都可以非常方便快捷地实现,管理员 ...

  6. js 实现进度条功能。

    /** * 纯js进度条 * Created by kiner on 15/3/22. */ function progress(options){ this.w = (options &&a ...

  7. [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技

    好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localsto ...

  8. 纯js实现瀑布流布局及ajax动态新增数据

    本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax ...

  9. 25个有用的jQuery日历和日期选取插件

    jQuery被认为是最好的JavaScript库,因为它简单易用.灵活,并有大量的插件.本文介绍25个非常不错的jQuery日历和日期选取插件,希望对各位有用. 1. Simple JQuery Da ...

随机推荐

  1. 解决:Error:java: 无效的源发行版: 12

    一. spring cloud项目启动.遇到问题: 二. 解决,共两个地方. 第一个位置: Shift/Ctrl/Alt/S 快捷键一起按 Modules选择你的项目(以及父级项目,如果有的话)-&g ...

  2. [xDebug] PhpStorm Xdebug远程调试环境搭建

    对于简单的工程,直接print_r();exit()已经足够,但是对于大型项目有时就有点力不从心.. 1,环境介绍 本地:windows10(192.168..)+ phpstorm8远程:Cento ...

  3. opencv视频教程分享

    opencv视频教程分享-在线与网盘 https://pan.baidu.com/s/1oAcctlS 密码:i5rd 链接:https://pan.baidu.com/s/1kVJ3iSJ  密码: ...

  4. Python数据结构01 线性结构

    栈 实现 后进先出的结构,主要有如下操作 *Stack() *push(item) *pop() *peek() *isEmpty() *size() class Stack(): def __ini ...

  5. RedHat服务器安装

    为什么选择 RedHat 市场占有率商业化比较高 厂商的支持比较丰富 新手建议ubuntu 进行上手 等熟悉了Linux环境可以选择自己喜欢的发行版 (有些Geeker就是认为Ubuntu太易于使用了 ...

  6. Selenium自动化测试与练习

    Selenium WebDriver 提供了web自动化各种语言(java python ruby等等) 调用接口库 提供 各种浏览器的驱动(web driver) 来驱动浏览器的 特点 测试程度可以 ...

  7. linux 系统文件目录颜色及特殊权限对应的颜色

    什么决定文件目录的颜色和背景?  颜色  说明  栗子  权限 白色 表示普通文件   蓝色 表示目录  绿色 表示可执行文件 浅蓝色 链接文件 黄色 表示设备文件 红色   表示压缩文件 红色闪烁 ...

  8. 下订单更新订单表然后减少库存表中的数据,出现库存超卖,使用数据库和redis坚决库存超卖的问题

    上面的代码更新库存的数据,存在多线程的问题,第一种方法使用synchronized关键字修饰的语句块代码,但是性能较低,并且还是存在问题的 在分布式的场景下,当前库存系统部署在多个tomcat上,即使 ...

  9. C# CLosedXML四句代码搞定DataTable数据导出到Excel

    最近用到DataTable导出到Excel,网上看了一下,都不怎么好使,逛了下GitHub一下完美解决了 用到的.net库CLosedXML,这个库用于读取,处理和写入Excel 2007+(.xls ...

  10. onunload对应的js代码为什么不能执行?和onbeforeunload的区别?

    为什么onunload对应的js代码不能执行? 为什么onbeforeunload才可以在离开页面时执行相应的js代码? 1.onunload和onbeforeunload都是在离开页面或者刷新页面的 ...