ZendFramework::Zend_Date(1)

唐突にZendFrameworkシリーズ。

日付処理をする度になんかリファレンスで調べてる気がするのでいい加減ちゃんと覚える。

ZendFrameworkだけど。

タイムゾーンの取得。特に意味はない。


echo date_default_timezone_get(); //Asia/Tokyo

newすれば現在の日付・時間を取得する


$date = new Zend_Date();
echo $date;  #2008/01/20 1:10:20

getメソッドで時間表示の仕方が変えられる。定数一覧 http://framework.zend.com/manual/ja/zend.date.constants.html


$date->get(Zend_Date::W3C);  // 2008-01-20T01:17:27+09:00

足すとき。


$date = new Zend_Date();
$date->add('30:00:00', Zend_Date::TIMES);  // 30時間たす
echo $date->get(Zend_Date::W3C);  // 2008-01-21T07:55:17+09:00

getメソッドの引数を指定すると色んな表示方法ができるけど、


$date = new Zend_Date();

echo $date->get(Zend_Date::MONTH_NAME_SHORT);  // 1 月
echo $date->get(Zend_Date::MONTH_NAME);  // 1 月
echo $date->get(Zend_Date::WEEKDAY_NAME);  // 日

ロケールが日本になってると、日本語で表示される。
使いどころによったら便利な気もするけど、「1」と「月」の間に半角スペースが入ってたり、なにしろカッコイクないので

newするときに英語で表示して下さいお願いしますって言うと英語表記になる。


$date = new Zend_Date('en');

echo $date->get(Zend_Date::MONTH_NAME_SHORT);  // Jan
echo $date->get(Zend_Date::MONTH_NAME);  // January
echo $date->get(Zend_Date::WEEKDAY_NAME);  // Sun

やっぱこっちのほうがイカス。

つづく。

定数一覧 http://framework.zend.com/manual/ja/zend.date.constants.html
メソッド http://framework.zend.com/manual/ja/zend.date.overview.html#zend.date.others.comparison

CS3買った

AdobeCS3

Production Premium。DVD5枚組+DVD3枚
テラ安ーす
57800円。

アカデミック版より3割ぐらい安くてアップグレードもできるとか。

http://www.adobe.com/jp/designcenter/video_workshop/
こんなんあるのか。

AfterEffectsとかPremireはまぁたぶん使わない。
PhotoshopとIllustratorとFlashだけ入れた。

JavaScriptのスコープわからない

オライリーのJavaScriptの本読んでてスコープのところでつまった。


var scope = "global";
function f() {
  alert(scope);
  var scope = "local";
  alert(scope);
}
f();

これをfirebugで実行すると1回目のalertで「undefined」2回目のalertで「local」が表示される。

でも、関数内でvar scopeをコメントアウトすると


var scope = "global";
function f() {
  alert(scope);
  //var scope = "local";
  alert(scope);
}
f();

2回とも「global」が表示される。

なんで?
最初のコードの変数scopeは関数外で宣言されてるからundefinedなのはわかるけど、後のコードは関数外のグローバル変数見に行ってもいいの?

----------------------------------------------------------------------------------------------------------------------------------
※追記
----------------------------------------------------------------------------------------------------------------------------------
コメントとかチャットで色々教えてもらって、たぶんわかった。


var scope = "global";
function f() {
  alert(scope);
  var scope = "local";
  alert(scope);
}
f();

こう書いても実行時の解釈は


var scope = "global";
function f() {
  var scope; // 関数内スコープ変数scopeが定義される
  alert(scope); // 関数内スコープ変数が参照されるため、もちろん未定義値(undefined)が返される
  scope = "local"; // 関数内スコープ変数scopeに"local"をセット
  alert(scope); // local
}
f();

ってなるらしい。

f()を呼び出すときに初めて「function f()〜〜」の上から順番に読み込むんだと思ってたけど、違うみたい。
f()を呼ぶときにはもうf関数は定義済み。

関数内に目的の変数名のローカル変数が無いと同じ名前のグローバル変数探しに行く。
ってことでいいのかな。

よくわかりました。