123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- // components/datatimepicker/datatimepicker.js
- Component({
- behaviors: ['wx://form-field'],
- externalClasses: ["i-class"],
- properties: {
- format: {
- type: String
- },
- name: {
- type: String
- },
- placeholder: {
- type: String
- }
- },
- data: {},
- lifetimes: {
- attached: function() {
- //当前时间 年月日 时分秒
- const date = new Date()
- const curYear = date.getFullYear()
- const curMonth = date.getMonth() + 1
- const curDay = date.getDate()
- const curHour = date.getHours()
- const curMinute = date.getMinutes()
- const curSecond = date.getSeconds()
- //初始化时间选择轴
- this.setData({
- chooseYear: curYear
- })
- this.initColumn(curMonth);
- if(curMonth==2) this.setData({ days: this.data.multiArray[2] })
- //不足两位的前面好补0 因为后面要获取在时间轴上的索引 时间轴初始化的时候都是两位
- var showMonth = curMonth < 10 ? ('0' + curMonth) : curMonth
- var showDay = curDay < 10 ? ('0' + curDay) : curDay
- var showHour = curHour < 10 ? ('0' + curHour) : curHour
- var showMinute = curMinute < 10 ? ('0' + curMinute) : curMinute
- var showSecond = curSecond < 10 ? ('0' + curSecond) : curSecond
- //当前时间在picker列上面的索引 为了当打开时间选择轴时选中当前的时间
- var indexYear = this.data.years.indexOf(curYear + '')
- var indexMonth = this.data.months.indexOf(showMonth + '')
- var indexDay = this.data.days.indexOf(showDay + '')
- var indexHour = this.data.hours.indexOf(showHour + '')
- var indexMinute = this.data.minutes.indexOf(showMinute + '')
- var indexSecond = this.data.seconds.indexOf(showSecond + '')
- var multiIndex = []
- var multiArray = []
- var value = ''
- var format = this.properties.format;
- if (format == 'yyyy-MM-dd') {
- multiIndex = [indexYear, indexMonth, indexDay]
- value = `${curYear}-${showMonth}-${showDay}`
- multiArray = [this.data.years, this.data.months, this.data.days]
- }
- if (format == 'HH:mm:ss') {
- multiIndex = [indexHour, indexMinute, indexSecond]
- value = `${showHour}:${showMinute}:${showSecond}`
- multiArray = [this.data.hours, this.data.minutes, this.data.seconds]
- }
- if (format == 'yyyy-MM-dd HH:mm') {
- multiIndex = [indexYear, indexMonth, indexDay, indexHour, indexMinute]
- value = `${curYear}-${showMonth}-${showDay} ${showHour}:${showMinute}`
- multiArray = [this.data.years, this.data.months, this.data.days, this.data.hours, this.data.minutes]
- }
- if (format == 'yyyy-MM-dd HH:mm:ss') {
- multiIndex = [indexYear, indexMonth, indexDay, indexHour, indexMinute, indexSecond]
- value = `${curYear}-${showMonth}-${showDay} ${showHour}:${showMinute}:${showSecond}`
- multiArray = [this.data.years, this.data.months, this.data.days, this.data.hours, this.data.minutes, this.data.seconds]
- }
- this.setData({
- // value, // 初始时间
- multiIndex,
- multiArray,
- curMonth,
- chooseYear: curYear,
- })
- }
- },
- /**
- * 组件的方法列表
- */
- methods: {
- //获取时间日期
- bindPickerChange: function(e) {
- this.setData({
- multiIndex: e.detail.value
- })
- const index = this.data.multiIndex
- var format = this.properties.format
- var showTime = ''
- if (format == 'yyyy-MM-dd') {
- const year = this.data.multiArray[0][index[0]]
- const month = this.data.multiArray[1][index[1]]
- const day = this.data.multiArray[2][index[2]]
- showTime = `${year}-${month}-${day}`
- }
- if (format == 'HH:mm:ss') {
- const hour = this.data.multiArray[0][index[0]]
- const minute = this.data.multiArray[1][index[1]]
- const second = this.data.multiArray[2][index[2]]
- showTime = `${hour}:${minute}:${second}`
- }
- if (format == 'yyyy-MM-dd HH:mm') {
- const year = this.data.multiArray[0][index[0]]
- const month = this.data.multiArray[1][index[1]]
- const day = this.data.multiArray[2][index[2]]
- const hour = this.data.multiArray[3][index[3]]
- const minute = this.data.multiArray[4][index[4]]
- showTime = `${year}-${month}-${day} ${hour}:${minute}`
- }
- if (format == 'yyyy-MM-dd HH:mm:ss') {
- const year = this.data.multiArray[0][index[0]]
- const month = this.data.multiArray[1][index[1]]
- const day = this.data.multiArray[2][index[2]]
- const hour = this.data.multiArray[3][index[3]]
- const minute = this.data.multiArray[4][index[4]]
- const second = this.data.multiArray[5][index[5]]
- showTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`
- }
- this.setData({
- value: showTime
- })
- this.triggerEvent('dateTimePicker', showTime)
- },
- //初始化时间选择轴
- initColumn(curMonth) {
- const years = []
- const months = []
- const days = []
- const hours = []
- const minutes = []
- const seconds = []
- for (let i = 2019; i <= 2099; i++) {
- years.push(i + '')
- }
- for (let i = 1; i <= 12; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- months.push(i + '')
- }
- if (curMonth == 1 || curMonth == 3 || curMonth == 5 || curMonth == 7 || curMonth == 8 || curMonth == 10 || curMonth == 12) {
- for (let i = 1; i <= 31; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- days.push(i + '')
- }
- }
- if (curMonth == 4 || curMonth == 6 || curMonth == 9 || curMonth == 11) {
- for (let i = 1; i <= 30; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- days.push(i + '')
- }
- }
- if (curMonth == 2) {
- this.setFebDays()
- }
- for (let i = 0; i <= 23; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- hours.push(i + '')
- }
- for (let i = 0; i <= 59; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- minutes.push(i + '')
- }
- for (let i = 0; i <= 59; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- seconds.push(i + '')
- }
- this.setData({
- years,
- months,
- days,
- hours,
- minutes,
- seconds
- })
- },
- /**
- * 列改变时触发
- */
- bindPickerColumnChange: function(e) {
- //获取年份 用于计算改年的2月份为平年还是闰年
- if (e.detail.column == 0 && this.properties.format != 'HH:mm:ss') {
- var chooseYear = this.data.multiArray[e.detail.column][e.detail.value];
- this.setData({
- chooseYear
- })
- if (this.data.curMonth == '02' || this.data.chooseMonth == '02') {
- this.setFebDays()
- }
- }
- //当前第二为月份时需要初始化当月的天数
- if (e.detail.column == 1 && this.properties.format != 'HH:mm:ss') {
- let num = parseInt(this.data.multiArray[e.detail.column][e.detail.value]);
- let temp = [];
- if (num == 1 || num == 3 || num == 5 || num == 7 || num == 8 || num == 10 || num == 12) { //31天的月份
- for (let i = 1; i <= 31; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- temp.push("" + i);
- }
- this.setData({
- ['multiArray[2]']: temp
- });
- } else if (num == 4 || num == 6 || num == 9 || num == 11) { //30天的月份
- for (let i = 1; i <= 30; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- temp.push("" + i);
- }
- this.setData({
- ['multiArray[2]']: temp
- });
- } else if (num == 2) { //2月份天数
- this.setFebDays()
- }
- }
- var data = {
- multiArray: this.data.multiArray,
- multiIndex: this.data.multiIndex
- };
- data.multiIndex[e.detail.column] = e.detail.value;
- this.setData(data);
- },
- //计算二月份天数
- setFebDays() {
- let year = parseInt(this.data.chooseYear);
- let temp = [];
- if (year % (year % 100 ? 4 : 400) ? false : true) {
- for (let i = 1; i <= 29; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- temp.push("" + i);
- }
- this.setData({
- ['multiArray[2]']: temp,
- chooseMonth: '02'
- });
- } else {
- for (let i = 1; i <= 28; i++) {
- if (i < 10) {
- i = "0" + i;
- }
- temp.push("" + i);
- }
- this.setData({
- ['multiArray[2]']: temp,
- chooseMonth: '02'
- });
- }
- }
- },
- })
|