LoginSignup
9
8

More than 5 years have passed since last update.

input type=dateで和暦(元号+年)を表示する工夫

Last updated at Posted at 2016-08-04

何なの?

すみません。

利用者の登録用紙みたいなのがあって、生年月日を西暦で書いてって誘導があるのにもかかわらず、どういうわけか和暦で書いてあるものが混在している場合、その登録のたびに「えーと昭和YY年って西暦何年だっけ?」と西暦と和暦の変換のために、入力のテンポが悪くなることありませんか?

「○○年引けばいいじゃん」
「○○年足せばいいじゃん」

確かにそうなんですけど、日常をぼんやりと過ごしていたら、その「○○年」もぼんやりとしてきて、結局何年だったか自信がなくなってググっている私がいました。

もうイヤなんです。
もう疲れたんです。
なので、入力コントロールに表示させればいいじゃんというわけなんですが。

こんなのありました。発想がしゅごい。Chrome限定。見た目んー。

http://d.hatena.ne.jp/chi-bd/20160730/1469883831
Chromeのinput[type=date]タグ内に和暦を表示する - Null and void

こんなのもありました。機能の割りに実装が大変そう。jQuery UIかー。

http://pedal-blog.2-d.jp/datepicker-wareki/
DatePickerの西暦を和暦で表示する方法 - Pedal Blog

で、JavaScriptでDatetoLocaleDateString()を使って何かできないかと模索した結果がこちらです。

実装

主に楽するために jQuery, Moment.js ,bootstrap3, font-awesome を使っています。

HTML

<div class="form-group col-xs-12 col-sm-6">
  <label for="dateOfBirth" class="control-label">生年月日</label>
  <div class="input-group">
    <div class="input-group-addon">
      <i class="fa fa-calendar" aria-hidden="true"></i> <span class="jy" aria-hidden="true">元号XX年</span>
    </div>
    <input type="date" name="dateOfBirth" id="dateOfBirth" class="form-control" max="" title="入力してください。">
  </div>
</div>

JS

$('#dateOfBirth').change(function() {
  var $dob = $(this);
  var d = moment($dob.val()).toDate();
  var jy = '元号XX年';
  if (d.toString() !== "Invalid Date") {
    jy = d.toLocaleDateString('ja-JP-u-ca-japanese', {
      year: 'numeric'
    });
  }
  $dob.prev().find('span.jy').text(jy);
});

実行結果

で?

すみません。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8