首頁 > web前端 > html教學 > 實作微信小程式中的日期選擇器效果

實作微信小程式中的日期選擇器效果

王林
發布: 2023-11-21 10:31:16
原創
1313 人瀏覽過

實作微信小程式中的日期選擇器效果

隨著微信小程式的廣泛應用,越來越多的開發者需要實現日期選擇器效果來提高使用者體驗。本文將介紹如何在微信小程式中實現日期選擇器效果,並給出具體的程式碼範例。

一、實作想法

實現日期選擇器效果的基本想法是:首先在WXML 中建立日期選擇器元件,透過JavaScript 來動態產生日期數據,再透過監聽元件的change事件來獲取使用者選擇的日期資訊。

二、實作過程

  1. 在WXML 中建立日期選擇器元件

我們可以使用微信小程式提供的picker-view 元件來實現日期選擇器效果。 picker-view 元件可以將類似清單的內容呈現為捲動選擇器的形式。

在 WXML 中,我們可以這樣寫:

<picker-view bindchange="onDateChange" value="{{dateIndex}}" style="width: 100%; height: 200rpx;">
  <picker-view-column>
    <view wx:for="{{years}}" wx:key="year">{{item}}年</view>
  </picker-view-column>
  <picker-view-column>
    <view wx:for="{{months}}" wx:key="month">{{item}}月</view>
  </picker-view-column>
  <picker-view-column>
    <view wx:for="{{days}}" wx:key="day">{{item}}日</view>
  </picker-view-column>
</picker-view>
登入後複製

上述程式碼建立了一個 picker-view 元件,綁定了 onDateChange 事件和 dateIndex 變數。其中,years、months 和 days 變數用來儲存產生的年月日資料。

  1. JavaScript 動態產生日期資料

為了產生日期數據,我們需要取得目前的年、月和日,然後使用比較簡單的演算法分別產生年、月和日的數組。

在JavaScript 中,我們可以這樣寫:

Page({
  data: {
    years: [],
    months: [],
    days: [],
    dateIndex: 0
  },
  onLoad: function () {
    // 获取当前年月日
    var datetime = new Date();
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1;
    var day = datetime.getDate();

    // 设置年份数组,从当前年往前推 100 年
    var years = [];
    for (var i = year; i >= year - 100; i--) {
      years.push(i);
    }

    // 设置月份数组
    var months = [];
    for (var i = 1; i <= 12; i++) {
      months.push(i);
    }

    // 设置日期数组,根据年月计算出当月的天数
    var days = [];
    var dayCount = this.getDaysOfMonth(year, month);
    for (var i = 1; i <= dayCount; i++) {
      days.push(i);
    }

    // 更新数据
    this.setData({
      years: years,
      months: months,
      days: days
    });
  },
  // 根据年月获取当月的天数
  getDaysOfMonth: function (year, month) {
    var dayCount = 31;
    switch (month) {
      case 2:
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
          dayCount = 29;
        } else {
          dayCount = 28;
        }
        break;
      case 4:
      case 6:
      case 9:
      case 11:
        dayCount = 30;
        break;
    }
    return dayCount;
  },
  // 监听日期选择器的 change 事件,更新 dateIndex 变量
  onDateChange: function (e) {
    this.setData({
      dateIndex: e.detail.value
    });
  }
});
登入後複製
登入後複製

上述程式碼先取得目前的年、月和日,然後根據年份和月份計算當月的天數,並將年、月和日分別儲存到years、months 和days 陣列中。

在 onLoad 函數中,我們呼叫 getDaysOfMonth 函數來取得當月的天數,並將得到的年、月、日資料儲存到 data 變數中。我們也可以在 onLoad 函數中設定初始的 dateIndex 變數為 0。

在 onDateChange 函數中,我們使用 setData 函數來更新 dateIndex 變量,將使用者選擇的日期資訊記錄下來。

三、程式碼範例

完整的微信小程式程式碼如下所示:

<page>
  <view class="page__body">
    <picker-view bindchange="onDateChange" value="{{dateIndex}}" style="width: 100%; height: 200rpx;">
      <picker-view-column>
        <view wx:for="{{years}}" wx:key="year">{{item}}年</view>
      </picker-view-column>
      <picker-view-column>
        <view wx:for="{{months}}" wx:key="month">{{item}}月</view>
      </picker-view-column>
      <picker-view-column>
        <view wx:for="{{days}}" wx:key="day">{{item}}日</view>
      </picker-view-column>
    </picker-view>
  </view>
</page>
登入後複製
Page({
  data: {
    years: [],
    months: [],
    days: [],
    dateIndex: 0
  },
  onLoad: function () {
    // 获取当前年月日
    var datetime = new Date();
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1;
    var day = datetime.getDate();

    // 设置年份数组,从当前年往前推 100 年
    var years = [];
    for (var i = year; i >= year - 100; i--) {
      years.push(i);
    }

    // 设置月份数组
    var months = [];
    for (var i = 1; i <= 12; i++) {
      months.push(i);
    }

    // 设置日期数组,根据年月计算出当月的天数
    var days = [];
    var dayCount = this.getDaysOfMonth(year, month);
    for (var i = 1; i <= dayCount; i++) {
      days.push(i);
    }

    // 更新数据
    this.setData({
      years: years,
      months: months,
      days: days
    });
  },
  // 根据年月获取当月的天数
  getDaysOfMonth: function (year, month) {
    var dayCount = 31;
    switch (month) {
      case 2:
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
          dayCount = 29;
        } else {
          dayCount = 28;
        }
        break;
      case 4:
      case 6:
      case 9:
      case 11:
        dayCount = 30;
        break;
    }
    return dayCount;
  },
  // 监听日期选择器的 change 事件,更新 dateIndex 变量
  onDateChange: function (e) {
    this.setData({
      dateIndex: e.detail.value
    });
  }
});
登入後複製
登入後複製

四、總結

本文介紹如何在微信小程式中實現日期選擇器效果,包括建立日期選擇器元件、動態產生日期資料以及監聽元件的change 事件來取得使用者選擇的日期資訊。透過本文的實例,讀者可以了解到微信小程式的基本開發流程,以及掌握使用 picker-view 元件的方法。讀者可以根據本文的範例程式碼來實現自己的日期選擇器效果。

以上是實作微信小程式中的日期選擇器效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板