el-date-picker 日,周 ,月,自定义日期的使用总结

效果图:
按日 按周 按月
image.pngimage.pngimage.png
自定义:
image.png

  1. <template>
  2. <div class="date">
  3. <div class="data-left">
  4. <div class="time-text">时间选择</div>
  5. <el-select
  6. class="date-type-picker"
  7. v-model="dateType"
  8. @change="dateTypeChange"
  9. placeholder="请选择类型">
  10. <el-option
  11. v-for="item in dateTypeArr"
  12. :key="item.name"
  13. :label="item.name"
  14. :value="item.value">
  15. </el-option>
  16. </el-select>
  17. <!--按日-->
  18. <el-date-picker
  19. v-show="dateType == '0'"
  20. :clearable="false"
  21. v-model="dayValue"
  22. @change="changeDayValue()"
  23. type="date"
  24. value-format="timestamp"
  25. :picker-options="pickerOptions"
  26. placeholder="选择日期">
  27. </el-date-picker>
  28. <!--按周-->
  29. <el-date-picker
  30. v-show="dateType == '1'"
  31. :clearable="false"
  32. v-model="weekValue"
  33. type="week"
  34. format="yyyy 第 WW 周"
  35. @change="changeWeekValue()"
  36. :picker-options="pickerOptions"
  37. placeholder="请选择周">
  38. </el-date-picker>
  39. <!--按月-->
  40. <el-date-picker
  41. v-show="dateType == '2'"
  42. :clearable="false"
  43. v-model="monthValue"
  44. @change="changeMonthValue()"
  45. type="month"
  46. :picker-options="pickerOptions"
  47. placeholder="请选择月">
  48. </el-date-picker>
  49. <!--自定义-->
  50. <el-date-picker
  51. v-show="dateType == '3'"
  52. :clearable="false"
  53. v-model="dataForm.createTime"
  54. type="daterange"
  55. align="right"
  56. size="small"
  57. range-separator="至"
  58. start-placeholder="开始日期"
  59. end-placeholder="结束日期"
  60. value-format="timestamp"
  61. :picker-options="pickerOptions"
  62. @change="changeParameter"
  63. :default-time="defaultTime"
  64. >
  65. </el-date-picker>
  66. <div class="event-type">
  67. <div class="title-text">事件类型</div>
  68. <el-select
  69. v-model="dataForm.eventType"
  70. placeholder="请选择事件类型"
  71. filterable
  72. clearable
  73. @change="changeParameter">
  74. <el-option
  75. v-for="item in typeList"
  76. :key="item.name"
  77. :label="item.name"
  78. :value="item.type">
  79. </el-option>
  80. </el-select>
  81. </div>
  82. </div>
  83. <div class="search">
  84. <el-button size="mini" @click="statisticalEvent()">搜索</el-button>
  85. <el-button class="m-l-15 reset-btn" size="mini"
  86. @click="resetForm()">重置
  87. </el-button>
  88. </div>
  89. </div>
  90. </template>
  91. <script>
  92. import {eventTypeList} from "../../../api/eventProcessing";
  93. import {debounce} from "../../../utils";
  94. export default {
  95. exeSearchname: "topSearch",
  96. data() {
  97. return {
  98. dateType: '0', // 日期类型,默认为按日
  99. dayValue: new Date().setHours(0, 0, 0, 0), // 按照日的
  100. weekValue: '', // 按周
  101. monthValue: '', // 按月
  102. dateTypeArr: [
  103. {
  104. name: '按日',
  105. value: '0'
  106. },
  107. {
  108. name: '按周',
  109. value: '1'
  110. },
  111. {
  112. name: '按月',
  113. value: '2'
  114. },
  115. {
  116. name: '自定义',
  117. value: '3'
  118. }
  119. ],
  120. // 时间快捷选项
  121. pickerOptions: {
  122. // shortcuts: [
  123. // {
  124. // text: "今天",
  125. // onClick(picker) {
  126. // const end = new Date().getTime();
  127. // const start = new Date();
  128. // start.setHours(0, 0, 0, 0);
  129. // picker.$emit("pick", [start.setHours(0, 0, 0, 0), end]);
  130. // }
  131. // },
  132. // {
  133. // text: "昨天",
  134. // onClick(picker) {
  135. // const end = new Date();
  136. // const start = new Date();
  137. // start.setTime(start.getTime() - 3600 * 1000 * 24);
  138. // end.setHours(0, 0, 0, 0);
  139. // const endT = end.getTime() - 1000
  140. // picker.$emit("pick", [start.setHours(0, 0, 0, 0), endT]);
  141. // }
  142. // },
  143. // {
  144. // text: '近7天',
  145. // onClick(picker) {
  146. // const end = new Date().getTime();
  147. // const start = new Date();
  148. // start.setTime(start.getTime() - 3600 * 1000 * 24 * 6);
  149. // picker.$emit('pick', [start.setHours(0, 0, 0, 0), end]);
  150. // }
  151. // },
  152. // {
  153. // text: "最近一个月",
  154. // onClick(picker) {
  155. // const end = new Date().setHours(23, 59, 59, 0);
  156. // const start = new Date();
  157. // start.setTime(start.getTime() - 3600 * 1000 * 24 * 29);
  158. // picker.$emit("pick", [start.setHours(0, 0, 0, 0), end]);
  159. // }
  160. // }
  161. // ],
  162. disabledDate(time) {
  163. return time.getTime() > new Date().setHours(23, 59, 59, 0);
  164. }
  165. },
  166. dataForm: {
  167. startTime: "",
  168. endTime: "",
  169. createTime: [new Date().setHours(0, 0, 0, 0), new Date().getTime()],
  170. eventType: "",
  171. reportType: 1, // 报告类型
  172. },
  173. typeList: [],// 事件类型选择
  174. timeOut: ''
  175. }
  176. },
  177. computed: {
  178. defaultTime: function () {
  179. return ["00:00:00", "23:59:59"]
  180. }
  181. },
  182. destroyed() {
  183. if (this.timeOut != '') {
  184. clearTimeout(this.timeOut);
  185. this.timeOut = '';
  186. }
  187. },
  188. mounted() {
  189. if (this.timeOut != '') {
  190. clearTimeout(this.timeOut);
  191. this.timeOut = '';
  192. this.timeOut = setTimeout(() => {
  193. this.intEventTypeList()
  194. this.statisticalEvent()
  195. }, 200)
  196. } else {
  197. this.timeOut = setTimeout(() => {
  198. this.intEventTypeList()
  199. this.statisticalEvent()
  200. }, 200)
  201. }
  202. },
  203. watch: {
  204. '$store.state.region'() {
  205. setTimeout(() => {
  206. this.$emit('exeSearch', this.dataForm)
  207. }, 500)
  208. },
  209. },
  210. methods: {
  211. // 时间类型变化 日,周,月 恢复默认
  212. dateTypeChange() {
  213. // 按日
  214. if (this.dateType === '0') {
  215. this.dataForm.reportType = 1;
  216. this.dayValue = new Date().setHours(0, 0, 0, 0);
  217. let tmpDay = new Date().setHours(0, 0, 0, 0);
  218. this.dataForm.createTime = [Number(tmpDay.getTime()), Number(tmpDay.getTime()) + 86400000 - 1]
  219. this.statisticalEvent();
  220. }
  221. // 按周
  222. if (this.dateType === '1') {
  223. this.dataForm.reportType = 7;
  224. // 当前日期
  225. let tmpDate = new Date();
  226. let tmpTimestamp = tmpDate.getTime();
  227. // 当前日期的 日
  228. let tmpDay = tmpDate.getDay();
  229. // 当前周的 周一
  230. let tmpMonday = new Date(tmpTimestamp - (tmpDay - 1) * 60 * 60 * 24 * 1000);
  231. tmpMonday.setHours(0, 0, 0, 0);
  232. this.weekValue = tmpMonday;
  233. let tmpDayTimestamp = 86400000;
  234. // 周的开始 时间戳
  235. let start = tmpMonday.getTime() - tmpDayTimestamp;
  236. // 周的结束 时间戳
  237. let end = tmpMonday.getTime() + tmpDayTimestamp * 6 - 1;
  238. this.dataForm.createTime = [start, end]
  239. this.statisticalEvent();
  240. }
  241. // 按月
  242. if (this.dateType === '2') {
  243. this.dataForm.reportType = 31;
  244. // 一天时间的毫秒数
  245. let tmpDayTimestamp = 86400000;
  246. // 当前日期
  247. let tmpDate = new Date();
  248. // 当前日期的日设置为 当前月的 1 号
  249. tmpDate.setUTCDate(1);
  250. // 设置 1 号的时间为 0点0分0秒0毫秒
  251. tmpDate.setHours(0, 0, 0, 0);
  252. this.monthValue = tmpDate;
  253. // 获取当前月的天数
  254. let days = new Date(tmpDate.getFullYear(), tmpDate.getMonth() + 1, 0).getDate();
  255. // 月 第一天0点的时间戳
  256. let monthStartTimestamp = tmpDate.getTime();
  257. // 月 最后一天 23:59:59 的时间戳
  258. let monthEndTimestamp = tmpDate.getTime() + tmpDayTimestamp * days - 1;
  259. // 当前月份的 开始 结束 时间戳数组
  260. this.dataForm.createTime = [monthStartTimestamp, monthEndTimestamp]
  261. this.statisticalEvent();
  262. }
  263. // 自定义
  264. if (this.dateType === '3') {
  265. this.dataForm.reportType = 0;
  266. this.dataForm.createTime = [new Date().setHours(0, 0, 0, 0), new Date().getTime()];
  267. this.statisticalEvent();
  268. }
  269. },
  270. // 按月
  271. changeMonthValue() {
  272. this.dataForm.reportType = 31;
  273. let tmpDayTimestamp = 86400000;
  274. let tmpDate = new Date(this.monthValue);
  275. let days = new Date(tmpDate.getFullYear(), tmpDate.getMonth() + 1, 0).getDate();
  276. let monthStartTimestamp = tmpDate.getTime();
  277. let monthEndTimestamp = tmpDate.getTime() + tmpDayTimestamp * days - 1;
  278. this.dataForm.createTime = [monthStartTimestamp, monthEndTimestamp]
  279. this.statisticalEvent();
  280. },
  281. // 按周
  282. changeWeekValue() {
  283. this.dataForm.reportType = 7;
  284. // 一天的毫秒数
  285. let tmpDayTimestamp = 86400000;
  286. // 选择的周
  287. let tmpTimestamp = new Date(this.weekValue);
  288. // 周的开始时间戳
  289. let start = tmpTimestamp.getTime() - tmpDayTimestamp;
  290. // 周到结束时间戳
  291. let end = tmpTimestamp.getTime() + tmpDayTimestamp * 6 - 1;
  292. this.dataForm.createTime = [start, end]
  293. this.statisticalEvent();
  294. },
  295. // 按日
  296. changeDayValue() {
  297. this.dataForm.reportType = 1;
  298. this.dataForm.createTime = [Number(this.dayValue), Number(this.dayValue) + 86400000 - 1]
  299. this.statisticalEvent();
  300. },
  301. intEventTypeList() {
  302. eventTypeList().then(res => {
  303. if (res.code === 0) {
  304. this.typeList = []
  305. res.data.forEach(item => {
  306. this.typeList.push(
  307. {
  308. name: item.signName,
  309. type: item.signType
  310. }
  311. )
  312. })
  313. }
  314. })
  315. },
  316. // 选择时间,或选择时间类型后 调用
  317. changeParameter() {
  318. this.dataForm.time = ' ';
  319. // 选择时间,点击确定
  320. this.dataForm.startTime = String(this.dataForm.createTime[0]);
  321. this.dataForm.endTime = String(this.dataForm.createTime[1]);
  322. this.statisticalEvent()
  323. },
  324. // 重置
  325. resetForm() {
  326. this.$nextTick(() => {
  327. //取消选中样式
  328. this.dataForm.time = "0";
  329. this.dataForm.sensorType = '';
  330. this.dataForm.startTime = '';
  331. this.dataForm.endTime = '';
  332. this.dataForm.eventType = '';
  333. this.dataForm.createTime = [new Date().setHours(0, 0, 0, 0), new Date().getTime()];
  334. this.dateType = '0'; // 默认按日
  335. this.dayValue = new Date().setHours(0, 0, 0, 0); // 默认为当天
  336. this.dataForm.reportType = 1; // 报告类型默认
  337. // 重置后,按照默认的时间 查询
  338. this.statisticalEvent()
  339. });
  340. },
  341. statisticalEvent: debounce(function () {
  342. this.doStatisticalEvent();
  343. }, 300, true),
  344. //初始化查询事件
  345. doStatisticalEvent() {
  346. this.dataForm.startTime = String(this.dataForm.createTime[0]);
  347. this.dataForm.endTime = String(this.dataForm.createTime[1]);
  348. let sub = this.dataForm.endTime - this.dataForm.startTime
  349. if (sub > 2678400000) {// 一天的时间戳为86400000
  350. this.$message.warning('选择的日期不能超过31天!')
  351. this.dataForm.createTime = [new Date().setHours(0, 0, 0, 0), new Date().getTime()];
  352. this.dataForm.time = "0";
  353. this.dataForm.sensorType = '';
  354. this.dataForm.startTime = '';
  355. this.dataForm.endTime = '';
  356. return
  357. }
  358. this.$emit('exeSearch', this.dataForm)
  359. }
  360. }
  361. }
  362. </script>
  363. <style lang="less" scoped>
  364. .date {
  365. display: flex;
  366. flex-direction: row;
  367. justify-content: center;
  368. align-items: center;
  369. width: 100%;
  370. background: @background4;
  371. height: calc(var(--num80) * var(--num));
  372. line-height: calc(var(--num80) * var(--num));
  373. }
  374. .data-left {
  375. height: 100%;
  376. width: 80%;
  377. display: flex;
  378. flex-direction: row;
  379. justify-content: flex-start;
  380. align-items: center;
  381. }
  382. .date-picker {
  383. margin-left: calc(var(--num24) * var(--num));
  384. }
  385. .date-type-picker {
  386. width: calc(var(--num98) * var(--num));
  387. margin: 0 calc(var(--num8) * var(--num));
  388. }
  389. .time-text {
  390. font-size: calc(var(--num14) * var(--num));
  391. color: @whiteText1;
  392. margin-left: calc(var(--num24) * var(--num));
  393. }
  394. .title-text {
  395. font-size: calc(var(--num14) * var(--num));
  396. color: @whiteText1;
  397. margin-right: calc(var(--num24) * var(--num));
  398. }
  399. .event-type {
  400. height: 100%;
  401. margin-left: calc(var(--num42) * var(--num));
  402. display: flex;
  403. flex-direction: row;
  404. }
  405. .search {
  406. display: flex;
  407. flex-direction: row;
  408. justify-content: flex-end;
  409. align-items: center;
  410. height: 100%;
  411. width: 20%;
  412. }
  413. .reset-btn {
  414. margin-right: calc(var(--num24) * var(--num));
  415. border: calc(var(--num1) * var(--num)) solid @lucencyPrimary4 !important;
  416. background: @background3 !important;
  417. color: @whiteText1;
  418. }
  419. .reset-btn:hover {
  420. border: calc(var(--num1) * var(--num)) solid @lucencyPrimary2 !important;
  421. background: @background3 !important;
  422. color: @primary3 !important;
  423. }
  424. </style>
  • 获取当天0点时间戳
  1. new Date(new Date().toLocaleDateString()).getTime()
  • value-format是时间处理格式
  1. value-format="yyyy-MM-dd" //2018-12-27
  2. value-format="yyyy-MM-dd HH:mm:ss" //2018-12-27 00:00:00
  3. value-format="timestamp" // 1483326245000 时间戳
  • 日期date字符串格式转换为时间戳
  1. new Date("2021-05-07 12:25:45").getTime().toString();

DatePicker的基本操作

type=”daterange” 时, 结束的时间为当日的 0 点,应该为结束日期的 23:59:59秒,
解决方法为 : 添加 :default-time=”defaultTime”

  1. <el-date-picker
  2. style="width:178px"
  3. size="mini"
  4. v-model="addform.time"
  5. type="date"
  6. :default-time="defaultTime"
  7. format="yyyy-MM-dd HH:mm:ss"
  8. :picker-options="pickerOptions0"
  9. placeholder="选择日期">
  10. </el-date-picker>
  11. <script>
  12. data() {
  13. return {
  14. //默认日期 当天0点-当前时间 时间戳
  15. addform: {
  16. startTime: new Date(new Date().setHours(0, 0, 0, 0)).getTime(),
  17. endTime: new Date().getTime(),
  18. time: [new Date(new Date(new Date().setHours(0, 0, 0, 0))).getTime(), new Date().getTime()],
  19. },
  20. // 时间快捷选项
  21. pickerOptions: {
  22. shortcuts: [
  23. {
  24. text: "今天",
  25. onClick(picker) {
  26. const end = new Date();
  27. const start = new Date();
  28. //0点到当前时间 start.setHours(0, 0, 0, 0);
  29. start.setTime(new Date(new Date().toLocaleDateString()).getTime() );
  30. picker.$emit("pick", [start, end]);
  31. }
  32. },
  33. {
  34. text: "昨天",
  35. onClick(picker) {
  36. const end = new Date().setHours(0, 0, 0, 0);
  37. const start = new Date();
  38. start.setTime(start.getTime() - 3600 * 1000 * 24);
  39. const endT = end.getTime() - 1000
  40. picker.$emit("pick", [start.setHours(0, 0, 0, 0), endT]);
  41. }
  42. },
  43. {
  44. text: "最近一个月",
  45. onClick(picker) {
  46. const end = new Date().setHours(23, 59, 59, 0);
  47. const start = new Date();
  48. start.setTime(start.getTime() - 3600 * 1000 * 24 * 29);
  49. picker.$emit("pick", [start.setHours(0, 0, 0, 0), end]);
  50. }
  51. }
  52. ]
  53. },
  54. disabledDate(time) { // 不可选择的时间,设置为当天的 23:59:59
  55. return time.getTime() > new Date().setHours(23, 59, 59, 0);
  56. }
  57. //选择今天以及之后的日期
  58. pickerOptions0: {
  59. disabledDate(time) {
  60. return time.getTime() < Date.now() - 8.64e7;
  61. }
  62. },
  63. //如果没有后面的-8.64e7就是选择除了今天之后的日期
  64. pickerOptions1: {
  65. disabledDate(time) {
  66. return time.getTime() < Date.now();
  67. },
  68. },
  69. // 不能选择当天之前的日期和两天之后的日期
  70. pickerOptions2: {
  71. disabledDate(time) {
  72. // 当前时间,并设置分钟、秒为 0
  73. let tmpDate = new Date();
  74. tmpDate.setHours(0);
  75. tmpDate.setMinutes(0);
  76. tmpDate.setSeconds(0);
  77. let startDate = tmpDate.getTime()
  78. let endDate = startDate + 3600000 * 24 * 2; // 两天的时间
  79. return (time.getTime() < new Date().getTime() - 8.64e7 ||
  80. time.getTime() > endDate);
  81. }
  82. },
  83. }
  84. },
  85. computed: {
  86. defaultTime: function () {
  87. return ["00:00:00", "23:59:59"]
  88. }
  89. },
  90. <script>

时间表单验证不超过多少小时

  1. const validatecreateTime = (rule, value, callback) => {
  2. if (value) {
  3. const utc = value[1] - value[0];
  4. const time = utc / (60 * 60 * 1000);
  5. if (time > 2) {
  6. callback(new Error("时间选择跨度不能超过2小时")); //没有验证通过
  7. } else {
  8. callback(); //验证通过
  9. }
  10. } else {
  11. callback(new Error("请选择时间")); //没有验证通过
  12. }
  13. };

日期组件自定义当天有数据的样式标记

  • 引入moment时间日期处理插件
  1. import moment from "moment";
  2. data(){
  3. return{
  4. existDate: ["2021-06-21"],
  5. pickerOptions: {
  6. cellClassName: time => {
  7. if (this.existDate.includes(this.formatDate(time))) {
  8. return "red";
  9. }
  10. }
  11. },
  12. }
  13. }
  14. <style>
  15. .red {
  16. background: blue;
  17. color: white;
  18. border-radius: 50%;
  19. }
  20. </style>

获取指定第几天的时间戳

  • 0 当天 fun_date(0)
  • -7 最近一周(当前时间到前7天的时间) fun_date(7)
  • -30 最近一个月 fun_date(30)
  1. //获取指定第几天的时间戳 参数:正数是几天后 负数是几天前
  2. fun_date(num) {
  3. var date1 = new Date();
  4. //今天时间
  5. var time1 = new Date().getTime();
  6. var date2 = new Date(date1);
  7. date2.setDate(date1.getDate() + num);
  8. //num是正数表示之后的时间,num负数表示之前的时间,0表示今天
  9. var time2 = new Date(date2.getFullYear() + "-" + (date2.getMonth() + 1) + "-" + date2.getDate()).getTime();
  10. //判断time1 time2 的大小
  11. if (time1 - time2 <= 0) {
  12. this.queryItem.createTime = [time1, time2]
  13. } else {
  14. this.queryItem.createTime = [time2, time1]
  15. }
  16. }

时间戳转换 time(时间戳)

  1. let timeFormatter = function(time){
  2. if(time){
  3. var date = new Date(time)//把定义的时间赋值进来进行下面的转换
  4. var year = date.getFullYear();
  5. var month = (date.getMonth() + 1).toString().padStart(2, "0");
  6. var day = date.getDate().toString().padStart(2, "0");
  7. var hour = date.getHours().toString().padStart(2, "0");
  8. var minute = date.getMinutes().toString().padStart(2, "0");
  9. var second = date.getSeconds().toString().padStart(2, "0");
  10. return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
  11. }else{
  12. return '';
  13. }
  14. }

时间转换为时间戳

  1. var data_1 = new Date('2021-09-06 16:00:00')
  2. var time1 = data_1.getTime();//1630915200000

时间戳转换成指定形式

  1. Date.prototype.format = function(fmt) {
  2. var o = {
  3. "M+" : this.getMonth()+1, //月份
  4. "d+" : this.getDate(), //日
  5. "h+" : this.getHours(), //小时
  6. "m+" : this.getMinutes(), //分
  7. "s+" : this.getSeconds(), //秒
  8. "q+" : Math.floor((this.getMonth()+3)/3), //季度
  9. "S" : this.getMilliseconds() //毫秒
  10. };
  11. if(/(y+)/.test(fmt)) {
  12. fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  13. }
  14. for(var k in o) {
  15. if(new RegExp("("+ k +")").test(fmt)){
  16. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  17. }
  18. }
  19. return fmt;
  20. };
  21. var time1 = new Date().format("yyyy-MM-dd hh:mm:ss");//当前时间转换成指定格式
  22. var time2 = new Date(1522207388000).format("yyyy-MM-dd hh:mm:ss");//时间戳转换成成指定格式
  23. var oldTime = (new Date()).getTime();// 指定日期转换为时间戳,再转为指定格式
  24. var curTime = new Date(oldTime).format("yyyy-MM-dd");//2014-12-25
  25. var aa = new Date(oldTime).format("yyyyMMdd");//20141225

datePicker类型为周/月的时候获取开始时间和结束时间

  • 为周(获取周一到周日的时间段)
  • 为月(获取月初到月末的时间段)
  1. <!--时间检索 按天-->
  2. <span v-if="timeType == 'day'">
  3. <el-form-item >
  4. <el-date-picker
  5. v-model="queryItem.day"
  6. type="date"
  7. value-format="timestamp"
  8. :picker-options="pickerOptions0"
  9. placeholder="选择日期">
  10. </el-date-picker>
  11. </el-form-item>
  12. </span>
  13. <!--时间检索 按周-->
  14. <span v-if="timeType == 'week'">
  15. <el-form-item >
  16. <el-date-picker
  17. v-model="queryItem.week"
  18. type="week"
  19. format="yyyy 第 WW 周"
  20. @change="getWeek"
  21. placeholder="选择周">
  22. </el-date-picker>
  23. </el-form-item>
  24. </span>
  25. <!--时间检索 按月-->
  26. <span v-if="timeType == 'month'">
  27. <el-form-item >
  28. <el-date-picker
  29. v-model="queryItem.month"
  30. type="month"
  31. @change="getMonth"
  32. placeholder="选择月">
  33. </el-date-picker>
  34. </el-form-item>
  35. </span>
  • js
  1. //分析周
  2. getWeek(val){
  3. var weekTime = this.getWeeklyStartTimeAndEndTime(val);
  4. this.dateObj.startTime = weekTime.startTime;
  5. this.dateObj.endTime = weekTime.endTime;
  6. },
  7. //分析月
  8. getMonth(val){
  9. let monthTime = this.getMonthlyStartTimeAndEndTime(val);
  10. this.dateObj.startTime = monthTime.startTime;
  11. this.dateObj.endTime = monthTime.endTime;
  12. },
  13. /*
  14. * 获取周的开始和结束时间
  15. * */
  16. getWeeklyStartTimeAndEndTime(val) {
  17. let temp = {};
  18. // 标准时间,转为时间戳,
  19. // elementUiel-date-picker type是周时,返回的是周一
  20. let timeStamp = val.getTime();
  21. // 周的开始时间
  22. temp.startTime = timeStamp - 24 * 60 * 60 * 1000;
  23. // 周的结束时间
  24. temp.endTime = timeStamp + (24 * 60 * 60 * 1000) * 6 - 1000;
  25. return temp
  26. },
  27. /*
  28. * 获取某一年某一月的开始时间和结束时间
  29. * */
  30. getMonthlyStartTimeAndEndTime( val) {
  31. let temp = {};
  32. // 标准时间,转为时间戳
  33. // elementUiel-date-picker type是月时,返回的是选择月的第一天
  34. let timeStamp = val.getTime();
  35. let year = moment(timeStamp).utcOffset(480).format("YYYY");
  36. let month = moment(timeStamp).utcOffset(480).format("MM");
  37. // 月开始时间
  38. temp.startTime = timeStamp;
  39. // 月结束时间
  40. temp.endTime = timeStamp + (24 * 60 * 60 * 1000) * this.getMonthDays(year, month) - 1000;
  41. return temp;
  42. },
  43. // 获取某一年某一月的天数
  44. getMonthDays(year, month) {
  45. let date = new Date(year, month, 0)
  46. return date.getDate()
  47. }

el-date-picker type为datetime时只能限制未来时间不可选但是限制不了时分秒

  • type为datetimerange的没问题 可限制到十分秒
  • 只能通过change时间强行改值 超出当前时间默认当前最新时间
  1. <el-date-picker
  2. style="width: 100%"
  3. :clearable="false"
  4. placeholder="选择日期时间"
  5. v-model="confirmForm.confirmTime"
  6. :picker-options="pickerBeginDateBefore"
  7. type="datetime"
  8. value-format="timestamp"
  9. @change="handchangeDate"
  10. >
  11. </el-date-picker>
  12. <script>
  13. import moment from 'moment'
  14. export default {
  15. data(){
  16. return{
  17. confirmForm:{
  18. confirmTime:''
  19. },
  20. //限制未来时间不可选 但是十分秒仍然可以选
  21. pickerBeginDateBefore: {
  22. disabledDate(time) {
  23. return time.getTime() > Date.now();
  24. }
  25. },
  26. }
  27. },
  28. methods:{
  29. handchangeDate() {
  30. let startAt = new Date(this.confirmForm.confirmTime) * 1000 / 1000;
  31. //如果选择的时间大于当前本地时间则赋值当前本地时间
  32. if (startAt > Date.now()) {
  33. this.confirmForm.confirmTime = new Date();
  34. }
  35. },
  36. }
  37. }
  38. </script>

选择时间,不能跨月

  1. import moment from 'moment'; // 引入插件
  2. let currentDate = ''; // 当前选中的日期
  3. let disabledDate = time => { //
  4. //禁用日期
  5. let d = new Date(currentDate); // 获取当前选择时间
  6. let year = d.getFullYear(); // 获取当前 - 年
  7. let month = d.getMonth() + 1; // 获取当前 - 月
  8. let day = new Date(year, month, 0).getDate(); // 获取本月天数(获取下一个月的0日即前一月的最后一日)
  9. month = month > 9 ? month : '0' + month; // 优化月格式
  10. day = day > 9 ? day : '0' + day; // 优化日格式
  11. let startDay = `${year}-${month}-01 00:00:00`; // 当月第一天
  12. let endDay = `${year}-${month}-${day} 23:59:59`; // 当月最后一天
  13. let startTime = new Date(startDay).getTime(); // 第一天时间戳
  14. let endTime = new Date(endDay).getTime(); // 最后一天时间戳
  15. let cutTime = new Date(moment().format('YYYY-MM-DD 23:59:59')).getTime(); // 当前时间戳
  16. if (currentDate !== '') { // 是否选择日期,选择日期,禁用掉不符合要求的时间
  17. return (
  18. time.getTime() < startTime ||
  19. time.getTime() > endTime ||
  20. time.getTime() > cutTime
  21. );
  22. }
  23. return time.getTime() > cutTime; // 否则禁用大于当前时间的时间
  24. };
  25. let onPick = ({ minDate, maxDate }) => { // 选择时间事件
  26. currentDate = minDate.getTime();
  27. if (maxDate) {
  28. currentDate = '';
  29. }
  30. };
  31. let pickerOption = {
  32. disabledDate,
  33. onPick,
  34. };
  35. export default pickerOption;