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

このQ&Aのポイント
  • JavaScriptを使用してOracle10gにアクセスする際のDATE型の扱いについて困っています。
  • JavaScriptで受け取ったDATE型の値を特定の形式に変換したいが、関数を使用してもエラーが発生します。
  • このDATE型の値から年や月を取得する方法や、DATEオブジェクトの関数を調べる方法を教えてください。
回答を見る
  • ベストアンサー

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

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ページ よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

再現できないので推測の域を出ませんが、ヒントにでもなれば… IEとのことなので、MS仕様みたいな気がしますね。 typeofの際のobjectとdateは別物として扱われているようです。  http://msdn.microsoft.com/ja-jp/library/d70y8358.aspx 以下のあたりがヒントになりそう  http://msdn.microsoft.com/ja-jp/library/bb907043.aspx  http://msdn.microsoft.com/ja-jp/library/hhw1f6w5.aspx 手っ取り早く、ヤマカンならば… DBから受けた変数をdとして、  var dd = new Date( d.toString() ); などで、通常のdateオブジェクトにできそうな気がしますが…

mibusys
質問者

お礼

> DBから受けた変数をdとして、 >  var dd = new Date( d.toString() ); > などで、通常のdateオブジェクトにできそうな気がしますが… これは「おっ」と思って試してみたところ、うまくいきました。 対処療法的ですが、とりあえずはこの方法を採用することにしました。 「dateは何者か」という核心部分は不明なままですが 大変助かりました。ありがとうございました。

その他の回答 (1)

回答No.2

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のフォーマット指定で行けませんか?

mibusys
質問者

お礼

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

mibusys
質問者

補足

>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上のカラムのデータ型そのままで取得する必要があります。 出来ればもう一度、質問文をよく読んでいただけませんでしょうか。

関連するQ&A

  • JavaScriptの書き方

    C言語をすこしやって、つい最近JavaScriptを始めました。 new Date().getYear() ↑のような書き方はどうして「.(ドット)」が入るんですか?このような書き方はC言語の構造体内の変数を操作するときと似てる気がしますが、JavaScriptはどういう構造になっているんでしょうか? myDate = new Date(); myYear = myDate.getYear(); document.write(myYear); と document.write( new Date().getYear() ); は、 おなじ表示結果になりますよね。ドットで区切ってかく理由が分かりません。教えてください!

  • javaScriptのエラー

    サイトにjavaScriptを使って自動日付表示があったのでアップしたところ年代が2004では無く104と表示してしまいます。ちなみにスクリプトは下記の通りですよろしく御願します。 <略> myWeek = new Array("Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat."); myD = new Date(); myYear = (myD.getYear() <= 99) ? 1900+myD.getYear() : myD.getYear(); myMonth = myD.getMonth() + 1; myDate = myYear + "/" + myMonth + "/" + myD.getDate(); myDay = myWeek[myD.getDay()]; document.write(myDate, " ", myDay); <略>

    • ベストアンサー
    • Mac
  • ACCESSのDate関数について

    会社のDBにACCESSで繋いで必要な資料を作成しています。そのDBの日付の書式がyyyymmddの型になっていて、クエリの抽出条件でdate()と入力しても上手くいきません。そのために、left(date,4)&"/"&mid(date,5,2)&"/"&right(date,2)としてyyyy/mm/ddの型に直して抽出しています。このやり方だとクエリの実行にとても時間がかかります。yyyymmddのままでパラメータを指定して20070630と入力すると10秒かからずに表示されますが、yyyy/mm/ddの型に直してdate()にすると3分近くかかります。yyyymmddのままでdate()を使う方法はありますか?

  • javascript 自動日付更新

    宜しくお願いします。 サイトをアップした日付を、自動で更新したいです。 今までは、こちらのjavascriptを使っていたのですが、これですとブラウザ、クロムに対応していません。 文字化けしてしまいます。 <SCRIPT language="JavaScript"> <!-- renew = new Date(document.lastModified); y=renew.getYear(); m=renew.getMonth() + 1; d=renew.getDate(); if(y<1900) {y=y+1900;} document.write("最終更新日:"+y+"年"+m+"月"+d+"日"); //--> </SCRIPT> クロムでも動くjavascriptのコードはありませんか? 何卒、宜しくお願い致します。

  • JavaScriptでFIREFOXにも対応する西暦年月日を表示させたいです。

    JavaScriptで指定した年月日の年(西暦の「2009年」がFIREFOXだと「109年」という表記になってしまいます。 これを修正する方法をお教えいただければと思います。 よろしくお願いいたします。 (下記現在のプログラムです) heaer内 <SCRIPT LANGUAGE="JavaScript"> function DateString(oneDate) { month=oneDate.getMonth()+1 return oneDate.getYear() + "年 " + month + "月 " + oneDate.getDate() + "日 " } </SCRIPT> body内 <SCRIPT language="JavaScript"> document.write(DateString(new Date())) </SCRIPT>

  • JavaScriptの勉強を始めました。

    あるサイトを見ながらJavaScriptの勉強を始めました。 まだ初歩の初歩です。 <script language="JavaScript"> <!-- myD = new Date(); myYear = myD.getYear(); myYear4 = (myYear < 2000) ? myYear+1900 : myYear; myMess = myYear4; document.write( myMess ); --> </script> こういったコードがあったのですが、 myYear4 = (myYear < 2000) ? myYear+1900 : myYear; この部分をifで置き換えれるのかなと思い、下記のコードを作ってみました。 <script language="JavaScript"> <!-- myD = new Date(); myYear = myD.getYear(); if ( myYear < 2000 ){ myD = myYear + 1900; }else{ myD = myYear; } myMess = myYear; document.write( myMess ); --> </script> これって合っていますか? 暇なときでいいので見て下さったら助かります。 どうぞよろしくお願いします。

  • Date型オブジェクトから日付のみ取得し、Integer型にしたい

    Date型のオブジェクトから日付(ddの部分)を取得し、 その取得した日付をInteger型に変換して、Integerオブジェクトに入れたいのですが・・ うまく説明できないですが、例えば 「2002/8/12」の値を持つDate型オブジェクトから、 日付の「12」を取得し、Integer型オブジェクトに入れる→new Integer(12); という事をしたいんです。 Date型オブジェクトから日付のみ取得する方法を ご存知の方、教えて下さい。

    • ベストアンサー
    • Java
  • 時間の引き算をするには…?

    ホームページ制作でJavascriptを使っています。 ホームページ閲覧者のコンピュータ内部の時計を利用したJavascriptなのですが、 日付の表示でお聞きしたいことがあります。 以下のプログラムは、2003-11-07のような表示をするようなJavascriptを組んでいるのですが、 0時00分から0時59分までは前日の日付を表示するJavascriptにしたいのです。 この場合、どのようにすればよいのでしょうか? よろしくお願いします ============================================================ <SCRIPT language=JavaScript> <!-- xx = new Date(); yy = xx.getYear(); mm = xx.getMonth() + 1; dd = xx.getDate(); if ( yy < 2000 ) { yy += 1900; } if ( mm < 10 ) { mm = "0" + mm; } if ( dd < 10 ) { dd = "0" + dd; } document.write( yy + "-" + mm + "-" + dd ); // --> </SCRIPT>

  • 日付、時刻の比較について

    こんばんは。 現在、PHP4&MySQLの環境で業務アプリを 作成しております。 DBからDATE型(20060614)、TIME型(13:00:00)の データを取得して他の文字列と比較したのですが どうしてもうまく比較できません。 日付データはdate_format関数で使用して取得し strvar関数などで型変換をして比較しています。 ちなみにechoなどで実際の値を見ても同じ値でした。 やっぱり型があっていないのでしょうか? お願いします。

    • ベストアンサー
    • PHP
  • Date型からDate型への変換

    Date型の変換について質問です。 Date dt = new Date(); とすると「Thu Jan 25 14:41:33 JST 2007」のような内容のDateオブジェクトが生成されますよね。 これを「2007-01-25 14:41:33.000115」のようにDBでよく使用される形式のDateオブジェクトに変換したいんです。 SimpleDateFormatのformatメソッドを使用して String文字列「2007-01-25 14:41:33.000115」に変換して SimpleDateFormatのparseメソッドを使用すれば 上手くいくかと思ったのですが 「Thu Jan 25 14:48:09 JST 2007」というDateオブジェクトが返されてしまいます。 どのようにすれば期待する動作を実現できるでしょうか? 初歩的な質問かもしれませんが、 有識者の方々ご教授いただけますでしょうか。

    • ベストアンサー
    • Java

専門家に質問してみよう