Personal tools
You are here: Home KtJ's Blog サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(8)-javascriptで夏時間
« January 2020 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
 

サイトをFreeBSD10+python3.3+Bottleで作り直すメモ(8)-javascriptで夏時間

by ktj posted at 2014-07-27 12:54 last modified 2015-04-04 16:17

ブログ何かの作成/更新日時は日本時間で管理するつもりだが、「現地時間も併記できるとカッコいいよね」と思った次第。ささやかながら英語のコンテンツもあるしね。

表示できるようにしたいのは以下の3点。

  • 作成/更新日時の現地時間
  • 作成/更新日時の時差
  • その日時が夏時間中であるかどうか

あまりクライアントサイドのプログラミングって詳しく無いけど(むろんサーバサイドもせいぜいカジュアルレベルだけどそれ未満)、javascriptにうってつけの機能があるみたい。

DateオブジェクトのgetTimezoneOffset()メソッドがそれで、Dateオブジェクトが指す日時に対する標準時への時間差を分単位で示してくれるようだ(+09:00の日本時間なら-540)。夏時間かどうかを判別するルーチンがabout.comにあったのでそれをそのままありがたく使わせてもらおう

Date.prototype.stdTimezoneOffset = function() {
  var jan = new Date(this.getFullYear(), 0, 1);
  var jul = new Date(this.getFullYear(), 6, 1);
  return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}

Date.prototype.dst = function() {
  return this.getTimezoneOffset() < this.stdTimezoneOffset();
}

srdTimezoneOffsetメソッドは、Dateオブジェクトが示す日時と同年における「夏時間でないときの」時差を検出するルーチン。今のところ、夏時間のある所では一月一日と七月一日の時差が必ず異なるようになっているとのことなので、これの大きい方を取り出すことで夏時間でないときの時差を取り出せる。dstメソッドは、Dateオブジェクトが示す時差とその年における「夏時間で無いときの」時差を比較して、後者が大きいとき(Dateが示す日時が夏時間中であるとき)にTrueを返すルーチン。

Date.prototype.outputFmtdDate = function() {
  var weekdays = ['日', '月', '火', '水', '木', '金', '土'];
  var monthdata = ['1', '2', '3', '4', '5', '6',
                   '7', '8', '9', '10', '11', '12'];
  var year = String(this.getFullYear());
  var month = monthdata[this.getMonth()];
  var day = weekdays[this.getDay()];
  var date = String(this.getDate());
  var hour = String(this.getHours());
  var minute = String(this.getMinutes());
  var second = String(this.getSeconds());
  var offsetText, outputText;

  var offsetMinute = this.getTimezoneOffset();
  if (offsetMinute <= -600){
    offsetText = "+" + String(offsetMinute * (-1) / 60) + ":" +
                String(offSetMinute * (-1) % 60);
  }else if (offsetMinute < 0){
    offsetText = "+0" + String(offsetMinute * (-1) / 60) + ":" +
                String(offSetMinute * (-1) % 60);
  }else if (offsetMinute >= 600){
    offsetText = "-" + String(offsetMinute / 60) + ":" +
                String(offSetMinute % 60);
  }else{
    offsetText = "-0" + String(offsetMinute / 60) + ":" +
                String(offSetMinute % 60);
  }

  outputText = year + "/" + month + "/" + date +
               "(" + day + ") " + hour + ":" + minute +
               ":" + second + "[" + offsetText + "]";

  if (this.dst()){
    outputText += "(DST)";
  }

  return outputText;

}

で、このようなメソッドを作ってみた。このメソッドの返り値は"yyyy/m/d H:M:S[時差]"形式の日時テキストで夏時間の時は末尾に"(DST)"が入るという寸法。まだテストしてないけど。

The URL to Trackback this entry is:
http://www.ktjdragon.com/ktj/ktjs-blog/30b530a430c83092freebsd10-python3-3-bottle4f5c308a76f4305930e130e2-8-300cx5e74y6708z756a3081306ew66dc65e5300d306e65e54ed8309253d65f973059308b/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: