最近、いつ泣きましたか?

JavaScriptによるDBアクセス時のDATE型の扱い

ADODBとODBCを用い、Oracle10gに対してアクセスしています。
このとき、OracleのDATE型のカラムをJavaScriptで
受ける際の型で困っています。
HTAとして実行しており、IEのバージョンは7です。

JavaScriptで受けた値をtypeofで確認すると「date」と表示されます。
値を何も指定せずに文字列化すると
「Mon Jul 18 00:00:00 UTC+0900 2010」等の文字列になります。
ですので、JavaScriptのDate型であるように思えました。

受け取りたい形は「yyyy/MM/dd hh:mm:ss」という形なので、
「getYear」「getMonth」等の関数を使用して年部分・月部分を
個別に取得しようとしたところ「オブジェクトを指定してください」
というスクリプトエラーが発生しました。


確認の為、「alert(typeof(new Date()));」を実行してみたところ
「object」と表示されました…。当然ですがこちらの型であれば
「getYear」「getMonth」等の関数を使用することが出来ます。


つまり、JavaScriptで普通にnew Date()として使用する型と
DBにアクセスして取得する値の型は、異なっているらしい
というところまでは分かりました。


以下を教えてください。
・DBアクセスして取得されるこの「date型」は何者ですか?
・この「date」をJavaScriptの「Date型」に変換する方法があればそれを
・この「date」から、年・月等の値を取得する方法
・「date」オブジェクトの持つ関数をプログラミング的に調べる方法
・「date」オブジェクトの持つ関数の一覧等のリファレンス的Webページ
よろしくお願いします。

A 回答 (2件)

再現できないので推測の域を出ませんが、ヒントにでもなれば…



IEとのことなので、MS仕様みたいな気がしますね。
typeofの際のobjectとdateは別物として扱われているようです。
 http://msdn.microsoft.com/ja-jp/library/d70y8358 …

以下のあたりがヒントになりそう
 http://msdn.microsoft.com/ja-jp/library/bb907043 …
 http://msdn.microsoft.com/ja-jp/library/hhw1f6w5 …


手っ取り早く、ヤマカンならば…
DBから受けた変数をdとして、
 var dd = new Date( d.toString() );
などで、通常のdateオブジェクトにできそうな気がしますが…
    • good
    • 1
この回答へのお礼

> DBから受けた変数をdとして、
>  var dd = new Date( d.toString() );
> などで、通常のdateオブジェクトにできそうな気がしますが…

これは「おっ」と思って試してみたところ、うまくいきました。
対処療法的ですが、とりあえずはこの方法を採用することにしました。

「dateは何者か」という核心部分は不明なままですが
大変助かりました。ありがとうございました。

お礼日時:2010/01/08 09:29

JavaScriptのDateオブジェクト。


http://www.tohoho-web.com/js/date.htm
JavaScriptの解説書なら必ず書いてあるはずなので、手持ちの解説書を読まれてみてはいかがでしょうか。

「Oracle date」でググって出てきたところから。
http://oracle.se-free.com/dml/07_todate.html


> ・この「date」をJavaScriptの「Date型」に変換する方法があればそれを

JavaScriptで以下のようにすると指定した日付でDateオブジェクトを生成できるので、
Oracleから取得するときのフォーマットをJavaScriptに合うように指定して、文字列として引数にすれば行けるはずです。

dd = new Date("1999/12/31 23:59:59");

> ・この「date」から、年・月等の値を取得する方法
JavaScriptのDateオブジェクトではなく、Oracleのデータから年月だけを指定しての取得という意味でしょうか?
SQLが使えるはずですので、SQLのフォーマット指定で行けませんか?

この回答への補足

>JavaScriptのDateオブジェクトではなく、
>Oracleのデータから年月だけを指定しての取得という意味でしょうか?

両方間違っています。
話の対象は、JavaScriptのtypeofで「date」と表現されるオブジェクトの話です。
これはDB上のDATE型の値を格納する変数としてADODBが生成する型です。

日付(Date)
http://www.tohoho-web.com/js/date.htm
こういう基礎中の基礎の話ではありません。
質問文中でも誤解されないように記述していますが再度記述しておきます。
こちらの型はJavaScriptのtypeofで「object」と表現されます。


>SQLが使えるはずですので、SQLのフォーマット指定で行けませんか?

質問は「どんな方法でもいいのでDBから年月を取得する方法」ではありません。
『「date」から、年・月等の値を取得する方法』です。
DB内で型変換をしてしまうと意味はないので、
DB上のカラムのデータ型そのままで取得する必要があります。


出来ればもう一度、質問文をよく読んでいただけませんでしょうか。

補足日時:2010/01/08 09:49
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 11:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!