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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

3544閲覧

年齢から生年月日を算出して入力したい

popomarudasi

総合スコア20

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2020/09/07 14:50

編集2020/09/07 14:51

【実現したいこと】
・年齢を入力したら生年月日を自動入力したい。
【わからないこと】
・jQuery部分の年齢から生年月日を算出するところがわからないです。

↓写真
イメージ説明

Ruby

1<%= form_with(scope: :search, url: users_path, method: :get) do |f| %> 2 3 <div class="field"> 4 <p>年齢</p> 5 <input type="number" id="age_from"><br>から<br><input type="number" id="age_to">6 </div> 7 8 <div class="field"> 9 <p><%= f.label(:birthday, User.human_attribute_name(:birthday)) %></p> 10 <%= f.date_field :birthday_from, value: @search_params[:birthday_from], id: "birthday_from" %> 11 <br>から<br> 12 <%= f.date_field :birthday_to, value: @search_params[:birthday_to], id: "birthday_to" %> 13 </div> 14 15 <div class="actions"> 16 <%= f.submit "検索" %> 17 </div> 18 19<% end %>

jQuery

1//検索欄  年齢 入力 されたら 生年月日 算出 して 生年月日フォーム に セット 2$(document).on('change', '#age_from', function() { 3 4 var age_from = $('#age_from').val();// 5 var today = new Date(Date.now); 6 var birthday_from = today - age_from * 10000 ←すみません、ヤケクソです。全然あってないと思います。 7 $('#birthday_from').attr('value', birthday_from) 8 9});

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

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

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

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

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

Zuishin

2020/09/07 23:24 編集

仮に年齢を 10 歳から 20 歳とします。求める誕生日の範囲は、20 年前の今日から、11 年前の明日までです。明日 11 歳になる人は、今日は 10 歳最後の日だからです。 ならば、日付と年数を渡すことで日付の年数前の日付を返す関数を作れば、この両方が計算できます。 まずここから手を着けてください。Moment.js を使うのが良いと思います。 追記 あと明日の日付を求めなければいけませんね。これも Moment.js でできます。ややこしいのは 2 月 29 日が絡む場合だけ、それ以外は単純に今日の年、明日の年から 20 と 11 を引くだけで月日は同じものでできるはずです。
think49

2020/09/08 21:47 編集

@Zuishin さん > 本日の 20 年前から、明日の 11 年前までです。 「本日 = 2020/09/08」と仮定した場合、 ①20歳の誕生日 = 1999/09/09~2000/09/08 ②10歳の誕生日 = 2009/09/09~2010/09/08 となる為、「明日の21年前~本日の10年前」が正解かと思います。 ※ただし、「誕生時刻を0:00にリセットする」の前提条件を満たす必要があります。 ※個人的にはDate.prototype.setFullYearで要件を満たせそうなので、ライブラリを使わなくても良いとは思います。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear うるう年を考慮すると、「set後に日付を評価→日付が誕生日からずれていたら、誕生日以前にシフトする」の工程が必要ですが。
Zuishin

2020/09/07 23:58

そのようですね。逆だったようです。
guest

回答2

0

ベストアンサー

年齢を入力したら生年月日を自動入力したい

ご質問の要件であれば「無理」に終わりますので、考えをもっと詰めます。

もし、「20〜30歳 に該当する日付の範囲を求める」が要件であれば以下の2つの日付を求めることになります。

  1. 指定年齢(若年)に該当する年の1月1日
  2. 指定年齢(高年)に該当する年の12月31日

追記)コメントを受けて
発展して、誕生日は本日付けを基準にする場合

  1. 本日から起算した指定年齢(若年)に該当する年差
  2. 本日から起算した指定年齢(高年)に該当する年差

算出するところがわからない

2つとも、Dateオブジェクトで計算させるのが簡単です。

javascript

1let 2 birthRange = [20,30], 3 thisYear = new Date().getFullYear(), 4 thisMonth = new Date().getMonth(), 5 thisDate = new Date().getDate(), 6 // コメントを受けて 7 inputRange = [ 8 new Date(thisYear-birthRange[0], thisMonth-1, thisDate, 0, 0, 0), 9 new Date(thisYear-birthRange[1], thisMonth-1, thisDate, 0, 0, 0) 10 ] 11/* 12 inputRange = [ 13 new Date(thisYear-birthRange[0], 0, 1, 0, 0, 0), 14 new Date(thisYear-birthRange[1], 0, 1, 0, 0, 0) 15 ] 16 inputRange = [ 17 new Date(thisYear-birthRange[0], 0, 1, 0, 0, 0), 18 new Date(thisYear-birthRange[1]-1, 11, 31, 23, 59, 59, 999) ]; 19 ] 20 */ 21 22; 23 24console.log( thisYear ); 25console.log( inputRange[0].toString() ); 26console.log( inputRange[1].toString() );

※天邪鬼な入力(例えば 「100」から「20」)を想定し、ソートしやすい配列で持たせる。
※コメント箇所は数値範囲の、「から」「以上」「以下」「未満」といった細かい要件が不明なため。

投稿2020/09/07 22:19

編集2020/09/07 23:52
AkitoshiManabe

総合スコア5432

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

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

winterboum

2020/09/07 23:15

1/1、12/31 ではなく、「昨日の 20年前、30年前」 では?
AkitoshiManabe

2020/09/07 23:54

ありがとうございます。 年末、年始で考えるのはまだまだ詰めが甘い回答でしたので訂正しました。
guest

0

現在の西暦から年齢を引けば誕生日の西暦が出ます。
が、年齢からは誕生日の月日は算出できません

投稿2020/09/07 14:55

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問