【问题标题】:How to sort Vuetify date range picker?如何对 Vuetify 日期范围选择器进行排序?
【发布时间】:2022-01-17 20:15:18
【问题描述】:

我有一个 vuetify 日期范围选择器,如图所示:

                    <v-menu ref="effectiveDateMenu"
                        v-model="effectiveDateMenu"
                        :close-on-content-click="false"
                        transition="scale-transition"
                        offset-y
                        max-width="290px"
                        min-width="auto">
                    <template v-slot:activator="{ on, attrs }">
                        <v-text-field label="Time Period"
                                      v-model="effectiveDateRange"
                                      filled
                                      dense
                                      rounded
                                      @*:rules="[v => !!(v && v.length) || 'Rating period is required']"*@
                                      v-bind="attrs"
                                      v-on="on"
                                      range
                                      required
                                      :class="toggleEdit ? 'locked' : 'editable'"
                                      :readonly="toggleEdit"></v-text-field>
                    </template>
                    <v-date-picker v-model="dates"
                                   no-title
                                   @@input="datesPicked()"
                                   range></v-date-picker>
                </v-menu>

然后使用以下计算属性将值返回到文本字段,但是我无法按顺序排列日期。您只能选择两个日期,如果您首先选择较新的日期,它会首先使用该值填充文本字段,即使我在日期选择器的 v-model 上使用排序功能也是如此。任何帮助将不胜感激。

            computed: {
            effectiveDateRange: function () {
                // `this` points to the vm instance

                return this.dates.map((element) => {
                    var d = new Date(element);
                    return `${d.getUTCMonth() + 1}/${d.getUTCDate()}/${d.getUTCFullYear()}`;
                }).sort(function (a, b) {
                    // Turn your strings into dates, and then subtract them
                    // to get a value that is either negative, positive, or zero.
                    return new Date(b.date) - new Date(a.date);
                }).join(' - ')
            }
        }

【问题讨论】:

    标签: javascript vue.js vuejs2 vuetify.js


    【解决方案1】:

    由于dates 数组的元素是 ISO 8601 格式(YYYY-mm-dd 或 YYYY-mm)的字符串,其中日期和时间值的顺序是从最重要到最不重要,您可以简单地对数组进行排序:

    effectiveDateRange: function() {
      return this.dates.sort().join(' - ');
    }
    

    【讨论】:

    • 这行得通,但是为什么在 map() 函数之后排序不正确,因为它们仍然是日期格式?
    • 因为为了正确的字母排序,年份必须先出现(最好是四位数),然后是两位数的月份,然后是两位数的日期[dev.to/banesag/sorting-arrays-of-strings-in-javascript-2g11]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2018-03-08
    • 2017-09-19
    • 2021-09-24
    相关资源
    最近更新 更多