Chapter 3. Dates, Time, and Timers
DateオブジェクトやsetTimeoutなどの時間についての章
■3.4 Converting an ISO 8601 Formatted Date to a Format Acceptable to the Date Object
ISO 8601からDateオブジェクトに変換してみる。
var dtstr= "2009-10-15T14:42:51Z";// ISO 8601
// ISO 8061のTはTime、Zはzone
dtstr = dtstr.replace(/\D/g," ");// 数字だけにする
var dtcomps = dtstr.split(" ");
// modify month between 1 based ISO 8601 and zero based Date
dtcomps[1]--; // jsのmonthは0から指定なのでデクリメント
var convdt = new
Date(Date.UTC(dtcomps[0],dtcomps[1],dtcomps[2],dtcomps[3],dtcomps[4],dtcomps[5]));
//Thu Oct 15 2009 23:42:51 GMT+0900 Date
2009-10-15 だけみたいなTimeまで入れてないデータでも成立するようにsplitで分割した後に残りを0で埋めておくとかの処理があると適当な数字でもDateオブジェクトが作りやすい。が、こういうのはバグを作りやすいので厳密にしておいた方がいいような気もする。
function convertISO8601toDate(dtstr) {
dtstr = dtstr.replace(/\D/g," ");// 数字だけにする
var dtcomps = dtstr.split(" ");
// modify month between 1 based ISO 8601 and zero based Date
dtcomps[1]--; // jsのmonthは0から指定なのでデクリメント
if (dtcomps.length < 3) return "invalid date";
// if time not provided, set to zero
if (dtcomps.length < 4) {
dtcomps[3] = 0;
dtcomps[4] = 0;
dtcomps[5] = 0;
}
var convdt = new
Date(Date.UTC(dtcomps[0],dtcomps[1],dtcomps[2],dtcomps[3],dtcomps[4],dtcomps[5]));
return convdt.toUTCString();
}
convertISO8601toDate("2010-07-22");// Thu, 22 Jul 2010 00:00:00 GMT
■3.7 Tracking Elapsed Time
よくあるような経過時間を計るとき、Dateオブジェクト同士を引算すると簡単に差分を計算できる。
var firstDate;
window.onload=startTimer;
function startTimer(){
firstDate = new Date();
document.getElementById("date").onclick=doEvent;
}
function doEvent() {
var secondDate = new Date();
alert((secondDate - firstDate) / 1000);
}
■3.8 Creating a Timeout
setTimeout と setInterval の性質の違い。本にはたいしたこと書いてないが、John Resig - How JavaScript Timers Workが大変興味深い。
こっちも参考になる
■3.10 Using Function Closures with Timers
setTimeoutとか第三引数で実行関数に引数として値を渡せるけどIEは対応してないので関数でクロージャー作れば解決するとかの話。要はsetTimeout で実行する関数に引数を渡すみたいな。
setTimeoutとsetIntervalの本質的な内容はリンクがあっただけで投げられていた。
この章ではそこが一番難しいけど本には特に詳しく書いてない。
コメント(0件)
- TB-URL http://efcl.info/adiary/052/tb/