質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

Q&A

解決済

2回答

8538閲覧

v-modelの値を指定したフォーマットに変換したい

asasaas

総合スコア26

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

0グッド

0クリップ

投稿2021/02/01 21:51

ToDoアプリ作成のためにVuetifyを拡張したv-datetime-pickerというライブラリを利用しています。
これによって得られるv-modelの値が「Wed Feb 03 2021 00:00:00 GMT+0900 (日本標準時)」みたいになってしまうのですが、これをyyyy/MM/ddの形にフォーマットしたいです。

date-formatというプロパティがあるようなので試したのですが、入力欄に表示されるフォーマットしか変えられません。
moment.jsを導入し、フォーマットを行おうとしたのですがどのタイミングでフォーマットを行うべきなのかわかりません。
以下コードです。

vue

1//app.vue 2 3<template> 4 <v-app id="app"> 5 <v-form 6 :model="toDo" 7 :action="toDo.action" 8 method="post"> 9 10 <v-text-field 11 type="hidden" 12 :value="toDo.csrfToken" 13 name="authenticity_token"> 14 </v-text-field> 15 16 <v-text-field 17 v-model="toDo.title" 18 name="to_do[title]"> 19 </v-text-field> 20 21 <v-datetime-picker v-model="toDo.expiredAt" date-format="yyyy/MM/dd" /> 22 <div>Datetime value: {{ toDo.expiredAt }}</div> 23 24 <v-btn 25 type="primary" 26 native-type="submit">作成 27 </v-btn> 28 </v-form> 29 </v-app> 30</template> 31 32<script> 33import moment from "moment"; 34moment.locale('ja') 35 36export default { 37 data() { 38 return { 39 toDo: { 40 csrfToken: document.getElementsByName('csrf-token')[0].content, 41 title: '', 42 expiredAt: '', 43 action: '/to_dos' 44 }, 45 } 46 } 47} 48</script> 49

この場合だと、入力欄には2021/02/03と表示され、Datetime valieのあとは「Wed Feb 03 2021 00:00:00 GMT+0900 (日本標準時)」と表示されます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

filterを利用することで解決できました。

vue

1//app.vue 2 3<template> 4 (省略) 5 6 <v-datetime-picker v-model="toDo.expiredAt" date-format="yyyy/MM/dd" /> 7 <div>Datetime value: {{ toDo.expiredAt|dateFormat }}</div> 8 9 (省略) 10</template> 11 12<script> 13 (省略) 14 15 filters:{ 16 dateFormat: function(value){ 17 if(value != ''){ 18 return moment(value).format('YYYY/MM/DD'); 19 } 20 } 21 } 22} 23</script>

投稿2021/02/02 17:59

asasaas

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

https://github.com/darrenfang/vuetify-datetime-picker/blob/master/src/app.vue
こちらのコードサンプルが参考になるかと思います。

<v-expansion-panel> <v-expansion-panel-header>Custom Format</v-expansion-panel-header> <v-expansion-panel-content> <v-flex xs4> <v-datetime-picker v-model="formattedDatetime" date-format="MM/dd/yyyy"></v-datetime-picker> </v-flex> <div>Datetime value: <span v-text="formattedDatetime"></span></div> </v-expansion-panel-content> </v-expansion-panel>

投稿2021/02/01 23:59

WhiteTempest

総合スコア404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asasaas

2021/02/02 05:11

こちらのサンプルコードのようにdate-formatを指定しておりますが出力すると形式がそのままです。 White Tempestさんの環境では、v-textの表示もdate-formatで指定した形になっていますか?
WhiteTempest

2021/02/02 05:33

すみません。 手元に環境が無いため、なんともです。 私が言いたかったのは、 サンプルにあるのは v-textに""で指定していますが、 質問者様は{{}}としているため、 参照表現が異なり、結果の相違につながるのでは?と思った次第です。
asasaas

2021/02/02 05:51

試しましたが、同じような結果でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問