前端练手小项目--自定义时间(html+css+js)

这篇具有很好参考价值的文章主要介绍了前端练手小项目--自定义时间(html+css+js)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自定义时间

写文章的因

关于要写这篇文章的原因

  • 是记录在工作上遇到的困难需求,
  • 是希望能给大家提供一些解决问题的思路

接下来我描述这个需求的多样性,难点在哪。

  • 勾选勾选框开始时间与结束时间默认显示昨天与今天。
  • 取消勾选框开始时间与结束时间清空。
  • 选择开始时间,勾选框勾选,结束时间为今天。
    在用户点击 开始时间大于或者等于结束时间时,
    提示错误信息,开始时间清空,
    选择结束时间时,小于或者等于开始时间,
    显示报错,结束时间清空。
  • 选择结束时间,勾选框勾选,开始时间
    为所选结束时间的昨天。
    在用户点击结束时间小于或者等于结束时间时,
    提示错误信息,结束时间清空,
    选择开始时间时,大于或者等于开始时间,
    显示报错,开始时间清空。
  • 其次在每次选择时间的时候都要计算出开始时间与结束时间。
  • 用户不能选择限制范围之外的时间

前端练手小项目--自定义时间(html+css+js),需求吃吃吃,前端练手项目,javascript,html,css

1.效果演示

前端练手小项目--自定义时间(html+css+js),需求吃吃吃,前端练手项目,javascript,html,css

2.思路解析

2.1编写html

该部分比较简单,就一个错误提示div
一段文字,一个勾选框,两个时间选择框

<div id="errorMsg" style="color:red;margin-top:10px;margin-bottom:20px"></div>
    <div>
        <label for="select_time">自定义文件修改时间:</label>
        <input type="checkbox" name="select_time" id='selectTime' 
        	onchange="changeStatus(event)" id="selectTime">
        <input type="date"  id='startTime' ref="startTime" 
        	onchange="getstartTime(event)" max=""> ---
        <input type="date" ref="endTime" id="endTime" 
        	onchange="getEndTime(event)" max="">
    </div>

2.2编写自动得到当前时间的函数

这里的难点是在日期框显示‘yyyy-mm-dd’,
就需要对获取到的值进行处理,

 function GetDateStr(AddDayCount) { 
     var dd = new Date(); 
         dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期 
     var y = dd.getFullYear(); 
     var m = (dd.getMonth()+1);//获取当前月份的日期 
     var d = dd.getDate(); 
     if(m>=10&&m>=10){
          return y+"-"+m+"-"+d; 
      }else if(m<10&&d>=10){
          return y+"-"+'0'+m+"-"+d; 
      }else if(m<10&&d<10){
          return y+"-"+'0'+m+"-"+'0'+d; 
          } 
    }

2.3限制用户选择日期

该功能通过给input添加一个max属性即可,
但是该max属性值必须是max='yyyy-mm-dd’的形式。

window.onload=function(){
    document.getElementById('startTime').setAttribute('max',this.GetDateStr(-1))
    document.getElementById('endTime').setAttribute('max',this.GetDateStr(0))    
}

2.4关于时间的计算

时间的计算问题,因为我们通过Date.parse()
格式化时间得到的时间是东八区的时间,要想得到
零点的时间需要减去8个小时。
开始时间等于start=Date.parse(‘yyyy-mm-dd’)/1000-83600
结束时间等于end=Date.parse(‘yyyy-mm-dd’)/1000+16
3600
因为我们需要的时间是昨天的零点,以及今天的24点

  //得到时间为s
 var  modification_time_start=null,
      modification_time_end=null,
  modification_time_start=Date.parse(this.GetDateStr(-1)) / 1000-8*3600
  modification_time_end=Date.parse(this.GetDateStr(0)) / 1000+16*3600  

2.5用户选择开始时间

当用户选择开始时间,结束时间调用 GetDateStr()并赋值。
勾选框勾选,给该元素设置属性checked为true。
然后就是对开始时间与结束时间的判断来决定
是否显示错误提示,以及清空开始框。

function getstartTime() {
    $('#selectTime').attr('checked',true)//给勾选框添加属性,让其处于勾选状态
    $('#selectTime').prop('checked',true)
    modification_time_start = Date.parse($('#startTime').val())/1000-8*3600
    // 用户只选中开始时间,结束时间默认为当前时间。并重新赋值
    if(count||modification_time_end===null){
        document.getElementById('endTime').value=this.GetDateStr(0)
        count=!count
      }
    if(document.getElementById('startTime').value ==='' 
    		&& document.getElementById('endTime').value===''){
           $('#selectTime').attr('checked',false)
            $('#selectTime').prop('checked',false)
       }
    // document.getElementById('endTime').value=this.GetDateStr(0)
    document.getElementById('startTime').value=$('#startTime').val()
    modification_time_end= Date.parse($('#endTime').val())/1000+16*3600
    if(modification_time_end<=modification_time_start || 
    		$('#endTime').val()<=$('#startTime').val()){
       //alert('所选时间大于结束时间,请重新选择时间')
       document.getElementById('errorMsg').innerText='所选时间大于或等于结束时间,请重新选择时间'
       document.getElementById('startTime').value=''
       document.getElementById('endTime').value=$('#endTime').val()
     }else{
         document.getElementById('errorMsg').innerText=''
         }
        console.log('开始时间===》',modification_time_start,'结束时间===》', modification_time_end)
    }

2.6用户选择开始时间

当用户选择结束时间,结束时间调用 GetDateStr()并赋值。
勾选框勾选,给该元素设置属性checked为true。
然后就是对开始时间与结束时间的判断来决定
是否显示错误提示,以及清空结束时间框。

 function getEndTime() {
                $('#selectTime').attr('checked',true)
                $('#selectTime').prop('checked',true)      
                modification_time_end = Date.parse($('#endTime').val())/1000+16*3600
                document.getElementById('endTime').value=$('#endTime').val()
                modification_time_start= Date.parse($('#startTime').val())/1000-8*3600
            if(document.getElementById('startTime').value ==='' && document.getElementById('endTime').value===''){
                $('#selectTime').attr('checked',false)
                $('#selectTime').prop('checked',false)
        }
                //当用户只选中最后时间时,开始时间应该有个默认值。该最后时间的前一天,重新给开始时间赋值 
             if(modification_time_end<=modification_time_start || $('#endTime').val()<=$('#startTime').val()){
                        //alert('所选时间小于开始时间,请重新选择时间')
                        document.getElementById('errorMsg').innerText='所选时间小于或等于开始时间,请重新选择时间'
                        document.getElementById('endTime').value=''
                        document.getElementById('startTime').value=$('#startTime').val()
             }else{
                    document.getElementById('errorMsg').innerText=''
                }
             if(count){
                    let date=new Date(Date.parse($('#endTime').val())-24*3600*1000)
                    Y = date.getFullYear() + '-'
                    M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'
                    D = (date.getDate()< 10 ? '0'+date.getDate() : date.getDate())
                    document.getElementById('startTime').value=Y+M+D
                    modification_time_start=Date.parse(Y+M+D)/1000-8*3600
                    count=!count
            }
            console.log('开始时间===》',modification_time_start,'结束时间===》', modification_time_end)
        }

2.7总结

在该需求中,我们学到了那些内容

  • 计算时间的准确性(开始时间的0点,结束时间的24点)以及关于使用Date.parse(‘yyyy-mm-dd’)的值为东八区的值。
    +怎么得到当前时间,以及怎么将该值赋值到日期框中document.getElementById(‘startTime’).value=‘yyyy-mm-dd’,
  • 通过jquery改变勾选框的勾选状态$(’#selectTime’).attr(‘checked’,true) $(’#selectTime’).prop(‘checked’,true)

3.完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
</head>
<body>
    <div id="errorMsg" style="color:red;margin-top:10px;margin-bottom:20px"></div>
    <div>
        <label for="select_time">自定义文件修改时间:</label>
        <input type="checkbox" name="select_time" id='selectTime' onchange="changeStatus(event)" id="selectTime">
        <input type="date"  id='startTime' ref="startTime" onchange="getstartTime(event)" max=""> ---
        <input type="date" ref="endTime" id="endTime" onchange="getEndTime(event)" max="">
    </div>
    <script>
         var  modification_time_start=null,
         modification_time_end=null,
         count=true

    function GetDateStr(AddDayCount) { 
                var dd = new Date(); 
                dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期 
                var y = dd.getFullYear(); 
                var m = (dd.getMonth()+1);//获取当前月份的日期 
                var d = dd.getDate(); 
                if(m>=10&&m>=10){
                    return y+"-"+m+"-"+d; 
                }else if(m<10&&d>=10){
                    return y+"-"+'0'+m+"-"+d; 
                }else if(m<10&&d<10){
                    return y+"-"+'0'+m+"-"+'0'+d; 
                } 
           }
    window.onload=function(){
        document.getElementById('startTime').setAttribute('max',this.GetDateStr(-1))
        document.getElementById('endTime').setAttribute('max',this.GetDateStr(0))    
    }
    function changeStatus(event) {
                if (event.target.checked) {
                    modification_time_start=Date.parse(this.GetDateStr(-1)) / 1000-8*3600
                    modification_time_end=Date.parse(this.GetDateStr(0)) / 1000+16*3600
                    document.getElementById('startTime').value = this.GetDateStr(-1)
                    document.getElementById('endTime').value = this.GetDateStr(0)
                    console.log('开始时间===》',modification_time_start,'结束时间===》', modification_time_end)
                }else{
                    document.getElementById('startTime').value =null
                    document.getElementById('endTime').value=null
                    modification_time_end=null
                    modification_time_start=null
                }
            }
    function getstartTime() {
                $('#selectTime').attr('checked',true)
                $('#selectTime').prop('checked',true)
                modification_time_start = Date.parse($('#startTime').val())/1000-8*3600
                // 用户只选中开始时间,结束时间默认为当前时间。并重新赋值
                 if(count||modification_time_end===null){
                    document.getElementById('endTime').value=this.GetDateStr(0)
                    count=!count
                }
                if(document.getElementById('startTime').value ==='' && document.getElementById('endTime').value===''){
                    $('#selectTime').attr('checked',false)
                     $('#selectTime').prop('checked',false)
                }
                // document.getElementById('endTime').value=this.GetDateStr(0)
                document.getElementById('startTime').value=$('#startTime').val()
                modification_time_end= Date.parse($('#endTime').val())/1000+16*3600
                if(modification_time_end<=modification_time_start || $('#endTime').val()<=$('#startTime').val()){
                        //alert('所选时间大于结束时间,请重新选择时间')
                        document.getElementById('errorMsg').innerText='所选时间大于或等于结束时间,请重新选择时间'
                        document.getElementById('startTime').value=''
                        document.getElementById('endTime').value=$('#endTime').val()
                }else{
                    document.getElementById('errorMsg').innerText=''
                }
                console.log('开始时间===》',modification_time_start,'结束时间===》', modification_time_end)
            }
    function getEndTime() {
                $('#selectTime').attr('checked',true)
                $('#selectTime').prop('checked',true)      
                modification_time_end = Date.parse($('#endTime').val())/1000+16*3600
                document.getElementById('endTime').value=$('#endTime').val()
                modification_time_start= Date.parse($('#startTime').val())/1000-8*3600
            if(document.getElementById('startTime').value ==='' && document.getElementById('endTime').value===''){
                $('#selectTime').attr('checked',false)
                $('#selectTime').prop('checked',false)
        }
                //当用户只选中最后时间时,开始时间应该有个默认值。该最后时间的前一天,重新给开始时间赋值 
             if(modification_time_end<=modification_time_start || $('#endTime').val()<=$('#startTime').val()){
                        //alert('所选时间小于开始时间,请重新选择时间')
                        document.getElementById('errorMsg').innerText='所选时间小于或等于开始时间,请重新选择时间'
                        document.getElementById('endTime').value=''
                        document.getElementById('startTime').value=$('#startTime').val()
             }else{
                    document.getElementById('errorMsg').innerText=''
                }
             if(count){
                    let date=new Date(Date.parse($('#endTime').val())-24*3600*1000)
                    Y = date.getFullYear() + '-'
                    M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'
                    D = (date.getDate()< 10 ? '0'+date.getDate() : date.getDate())
                    document.getElementById('startTime').value=Y+M+D
                    modification_time_start=Date.parse(Y+M+D)/1000-8*3600
                    count=!count
            }
            console.log('开始时间===》',modification_time_start,'结束时间===》', modification_time_end)
        }
    </script>
</body>
</html>

好了这次的文章就到这了
如果觉得还不错的话,帮忙点个关注吧
希望能给博主点赞哎🎨,评论🧶,收藏🥼三连一波加粗样式文章来源地址https://www.toymoban.com/news/detail-654107.html

到了这里,关于前端练手小项目--自定义时间(html+css+js)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 截图转HTML代码,支持预览,前端不用浪费时间写html和css了

    试用地址:https://picoapps.xyz/free-tools/screenshot-to-code 这个简单的应用可以将截图转换为HTML/Tailwind CSS代码。它使用GPT-4 Vision来生成代码,并使用DALL-E 3来生成类似的图像。现在你也可以输入一个URL来克隆一个现有的网站! NYTimes Original Replica Instagram页面(没有泰勒·斯威夫特的照

    2024年02月04日
    浏览(39)
  • 前端基础面试题(HTML,CSS,JS)

    前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库  web前端面试题库 VS java后端面试题库大全 代码结构:  使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SEO:  爬虫根据标签来分配的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓

    2024年02月09日
    浏览(39)
  • 前端 :用HTML , CSS ,JS 做一个秒表

    2024年02月06日
    浏览(31)
  • 前端HTML、CSS、JS、VUE3 汇总

    学习https://developer.mozilla.org/zh-CN/docs/Learn/CSS 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 使用VS Code运行前端代码 在VS Code上安装前端插件 正在更新中~ ✨ 提示:这里可以添加本文要记录的大概内容: 学习路线 知识定位 HTML基础 标签、表格、表单、

    2024年02月13日
    浏览(40)
  • 常见前端基础面试题(HTML,CSS,JS)(三)

      类型转换可以分为两种, 隐性转换 和 显性转换 主要分为三大类:数值类型、字符串类型、布尔类型 三大类的原始类型值的转换规则我就不一一列举了 数值类型(引用类型转换) 字符串类型(引用类型转换) 类型 转换前 转换后 number 4 4 string \\\"1\\\" 1 string \\\"\\\" 0 boolean true 1 b

    2024年02月12日
    浏览(42)
  • 前端简单动态圣诞树动画(HTML、js、css)

    效果展示:  注释: 整体圣诞树分为3个部分,书的主干、粒子特效、树上的卡片 树上的卡片(重点):每一张卡片上都有一个名字,代表圣诞树的叶子,后面可以根据自己需求更改,比如全部改成喜欢人的名字,在JS代码的第五行内更改内容 树的动态旋转通过js实现、主干是

    2024年02月04日
    浏览(42)
  • ChatGPT给出的前端面试考点(html+css+JS)

    HTML HTML是什么,它的主要作用是什么? 什么是DOCTYPE,为什么在HTML文档中使用它? HTML5相对于之前的HTML版本有哪些主要的新特性? 解释语义化HTML的概念。为什么要使用语义化标签? 如何在HTML中嵌入JavaScript和CSS? 什么是表单,如何在HTML中创建一个表单? 什么是响应式图片

    2024年01月21日
    浏览(44)
  • html + css + js简单的项目

    想看更多可以私信我,要做毕设等网站也可以来找我

    2024年01月19日
    浏览(28)
  • 超好看的前端特效HTML特效、CSS特效、JS特效(第一期)

    1. 粒子组成文字动画特效 文件组成: base.css demo.css bcg.jpg demo.js demo.scss index.html 2. 爱心表白特效 文件组成: heart.svg index.html 3. 爱心跟随鼠标 index.html 4. 满屏漂浮爱心 index.html 5. 黑客帝国矩阵雨 index.html 6. 2024新年快乐动画特效 文件目录: style.css script.js index.html 7. 表白特效

    2024年02月19日
    浏览(38)
  • html+css+js实现微信和支付宝扫码支付前端

    本章教程,主要利用html+css+js技术实现微信和支付宝扫码支付前端页面。 目录 一、效果图预览  (1)支付宝扫码支付 (2)微信扫码支付 二、项目部分源码文件 (1)目录结构 (2)alipay.html (3)wxpay.html 三、项目完整源码下载 下载地址:html+css+js实现微信和支付宝扫码支付

    2024年02月11日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包