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

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

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

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

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

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)"が入るという寸法。まだテストしてないけど。

コメント(0)


Blog category: Ultima | Adventure games | BSD and Linux | FM TOWNS and Japanese home computers | Computers | Bottle | 広島新球場 | 日本プロ野球 | 広島市民球場跡地とサッカースタジアム | その他スポーツ | Other topics
2002 08 09 10 11 12
2003 01 02 03
2004 01 02 03 04 06 08 09 10 11 12
2005 01 02 03 04 05 06 07 08 09 10 11 12
2006 01 02 03 04 05 06 07 08 09 10 11 12
2007 01 02 03 04 05 06 07 08 09 10 11 12
2008 01 02 03 04 05 06 07 08 09 10 11 12
2009 01 02 04 05 06 07 09 10
2010 01 03 04 05 08 11
2011 01 02 03 04 07 11 12
2012 01 02 03 09 10 11
2013 01 02 03 05 06 07 08 09 10 11 12
2014 01 02 03 04 05 06 07 10 11 12
2015 01 02 03 04 05 07 08 11 12
2016 03 04 05 07 08 09 10 11
2017 06
2018 11 12
2019 01 04 10
2020 05 06 07

Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。