vue 根据选择的月份动态展示日期对应的星期几


Posted in Vue.js onFebruary 06, 2021

我等卑微的码农,依旧还得唱着“你我皆凡人,生在人世间,终日奔波苦,一刻不得闲,既然不是仙,难免有杂念,烦恼放两旁,工资摆中间,多少男子汉,秃顶又肥胖,加班的日夜,没有买保险”。

虽一直反抗,却从未奏效。大老板们是梦想照进现实,我等是梦想撞见黑锅!

牢骚了那么多,锅还得背,班还得加,code还得继续码!!!

来,把标题中所提到的这个效果给实现一下吧。

原理其实很简单,先得有一个选择年月的输入框吧,这里我用的是Element的DatePicker日期选择器组件,具体使用方法不多说,自己去看Element的API吧。

vue 根据选择的月份动态展示日期对应的星期几

然后就是根据选择的月份来动态显示当前月份的每一天了,这里用到了日期对象的两个方法:setMonth和setDate。

其中,setMonth(month, day) 方法用于设置月份,参数介绍如下:
month:必需。一个表示月份的数值,该值介于 0(一月) ~ 11(十二月) 之间。
day:可选。一个表示月的某一天的数值,该值介于 1 ~ 31 之间(以本地时间计)。在 EMCAScript 标准化之前,不支持该参数。

setDate(day) 方法用于设置一个月的某一天,参数介绍如下:
day:必需。表示一个月中的一天的一个数值(1 ~ 31)。

具体代码如下:

<template>
 <div>
  <el-date-picker v-model="month" type="month" @change="monthChange" placeholder="选择月" />
  <p>
   当月的每一天:
   <span v-for="item in everyDay" :key="item" style="margin-right:10px;">{{item}}</span>
  </p>
 </div>
</template>

<script>
export default {
 data() {
  return {
   month: "",
   everyDay: []
  };
 },
 mounted(){
  let date = new Date(), month = date.getMonth();
  this.getEveryDay(date, month);
 },
 methods: {
  monthChange(date) {
   this.getEveryDay(date, date.getMonth());
  },
  getEveryDay(date, month) {
   //设置月份
   date.setMonth(month + 1);
   //设置一个月的某一天-这里设置为零则取到的日期中的天就会是当月的最后一天(比如,二月份就是28或29,其他月份就是30或31),方便下边的循环
   date.setDate(0);
   let dayArry = [];
   //获取月份的某一天
   let day = date.getDate();

   for (let i = 1; i <= day; i++) {
    date.setDate(i);  //如果只获取当前选择月份的每一天,则不需要date.setDate(i)只需dayArry.push(i)即可,其中date.setDate(i)是设置当前月份的每一天
    dayArry.push(i + ' ' + this.getWeekday(date.getDay()));  //选中月份的每一天和当天是星期几
   }

   this.everyDay = dayArry;
  },
  getWeekday(day){
   return ["周日", "周一", "周二", "周三", "周四", "周五", "周六"][day];
  },
 }
};
</script>

展示效果如下:

vue 根据选择的月份动态展示日期对应的星期几

注意,由于getMonth方法返回的值是从0开始的,所以如果要想获得正确的月份,需要在返回的值的基础上加1。而setDate这里有一点特殊,需要详细说明一下,setDate用于设置一个月的某一天,比如setDate(1)就是设置一个月的第一天,setDate(10)就是设置一个月的第十天。而由于众所周知的原因,月份可能会有28天或29天或30天或31天,如果让我们自己去写代码判断,又太过于繁琐,此时setDate(0)的牛逼之处就显示出来了(官方给出的setDate的参数介于1-31之间,将0给无情地抛弃了,零兄此时悲伤的高歌:无情的世界无情的你,你把老子当成手中的垃圾),setDate(0)设置的是一个月的最后一天,甭管这一天是28还是29,亦或是30或31(零兄此时高喊:以前你对我爱答不理,现在让你高攀不起!),之后再通过getDate方法来获取我们已经设置好的一个月份的最后一天,最后来上一个for循环,将每一天给塞进一个数组中,就可以打完收工!

当然,我们还可以不展示每一天对应的是星期几,只将每周的周六周日所对应的那两天给标红展示,代码只是做了一点小修改:

<template>
 <div style="margin:50px;">
  <el-date-picker v-model="month" type="month" @change="monthChange" placeholder="选择月" />
  <p style="margin-top:10px;">
   当月的每一天:
   <span v-for="item in everyDay" :key="item" style="margin-right:10px;" v-html="item"></span>
  </p>
 </div>
</template>

<script>
export default {
 data() {
  return {
   month: "",
   everyDay: []
  };
 },
 mounted(){
  let date = new Date(), month = date.getMonth();
  this.getEveryDay(date, month);
 },
 methods: {
  monthChange(date) {
   this.getEveryDay(date, date.getMonth());
  },
  getEveryDay(date, month) {
   //设置月份
   date.setMonth(month + 1);
   //设置一个月的某一天-这里设置为零则取到的日期中的天就会是当月的最后一天(比如,二月份就是28或29,其他月份就是30或31),方便下边的循环
   date.setDate(0);
   let dayArry = [];
   //获取月份的某一天
   let day = date.getDate();

   for (let i = 1; i <= day; i++) {
    date.setDate(i);
    if(date.getDay() == 0 || date.getDay() == 6){
     dayArry.push('<i class="red">' + i + '</i>');
    }else{
     dayArry.push(i);
    }
   }

   this.everyDay = dayArry;
  },
 }
};
</script>
<style>
.red{color:red;font-style:normal;}
</style>

展示效果如下:

vue 根据选择的月份动态展示日期对应的星期几

作者:小坏

出处:http://tnnyang.cnblogs.com

以上就是vue 根据选择的月份动态展示日期对应的星期几的详细内容,更多关于vue 选择月份动态展示日期的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
详解Vue中的自定义指令
Dec 07 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue动态绑定style样式
Apr 20 Vue.js
解决vue项目本地启动时无法携带cookie的问题
Feb 06 #Vue.js
如何封装Vue Element的table表格组件
Feb 06 #Vue.js
Vue实现圆环进度条的示例
Feb 06 #Vue.js
vue浏览器返回监听的具体步骤
Feb 03 #Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 #Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 #Vue.js
Vue常用API、高级API的相关总结
Feb 02 #Vue.js
You might like
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
jquery插件制作教程 txtHover
2012/08/17 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
解决uWSGI的编码问题详解
2017/03/24 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python的文件操作方法汇总
2017/11/10 Python
django 消息框架 message使用详解
2019/07/22 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
python自动化发送邮件实例讲解
2021/01/04 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
初中生自我鉴定
2014/02/04 职场文书
境外导游求职信
2014/02/27 职场文书
学生鉴定评语大全
2014/05/05 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
贪污检举信范文
2015/03/02 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
用Python selenium实现淘宝抢单机器人
2021/06/18 Python