• 締切済み

PHP でyyyy/mm/dd形式の文字列から日付への変換方法、文字列処理関数

標記の件で質問です。(環境 : PHP 4.3) (1) 標準関数で、日付から和暦の曜日を取得することは可能でしょうか? 手元の市販書籍を見た限りではなさそうでしたので、下記のような関数を書いてみました しかし、引数にyyyy/mm/dd形式の日付 (例えば、2004/07/01 ~ 07/31) を指定して確認したところ、常に木曜 と判定されてしまいます。 yyyy/mm/dd形式の文字列は、日付型とは認識されないのでしょうか、それとも別の問題でしょうか? function GetWeekDayNameJp($DateTime) { $Number = strftime("%u", $DateTime); switch ( $Number ) { case 1: return "月"; break; case 2: return "火"; break; case 3: return "水"; break; case 4: return "木"; break; case 5: return "金"; break; case 6: return "土"; break; case 7: return "日"; break; } } (2) 標準関数で、yyyy/mm/dd 形式の文字列から日付型への変換は可能でしょうか? (=VBのCDate関数に相当するもの) これも、手元の市販書籍を見た限りではなさそうでしたが......? 手組みで作る場合、どのように実装すればよいでしょうか? (3) VBとの機能対応表 上記の処理を自前で実装するとすれば、文字列の左4桁(年)、中2桁(月)、右2桁(日) を切り出す (VBのLeft$、Mid$、Right$ 関数に相当) ことになると思いますが、どの関数 を使用すれば可能でしょうか? また、VBとPHPの機能対応表があればご紹介頂けないでしょうか? http://ns1.php.gr.jp/mailman/listinfo/php-dev も調べてみましたが、必要な情報を発見できませんでした。 (見落としているかも知れませんが....)

みんなの回答

  • umota
  • ベストアンサー率46% (150/324)
回答No.1

標準関数とは PHP の関数ということでしょうか? 既定インストールでの関数ということならばムリです。 曜日を知るにはカレンダー関数を使用します。 例 $dayofweek = JDDayOfWeek(gregoryantojd(6, 23, 2004),0); で 2004 年 6 月 23 日 の曜日を整数で返します。 (0 が日曜日) カレンダー関数を使用するためには configure で --enable-calendar を指定します。 詳しくはマニュアルをよんでください。 http://www.php.net/download-docs.php VI. カレンダー関数

参考URL:
http://www.php.net/download-docs.php
noname#7749
質問者

お礼

コメントありがとうございます。 (1) ご指摘の通り、strtotime 関数を使用したところ、yyyy/mm/dd形式文字列 → 日付型に変換することができ、GetWeekDayNameJp関数の 実行結果で期待通りの戻り値が得られました。 しかしながら、曜日の和名を表示する標準関数は、やはりないようです。 (2) 上記のstrtotime 関数はVBのCDate関数とほぼ同機能に該当するようです。 (3) (1)、(2)が解決したため、さしあたっての必要性はなくなりました。いずれ時間があるときに調べるつもりです。 大変助かりました。お礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DataGridViewでyyyy/MM/dd

    SQLServer2008で作ったデータベースをVB2010のDataGridViewで表示させております。 DataGridViewで日付列を"yyyy/MM/dd"のスラッシュ入り10桁で表示させたいのですが表示されません。 データベース側でのデータ型は「date」となっております。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy/MM/dd" こう記述すればいいと思ったのですが、「20111227」とスラッシュ無しで表示されてしまいます。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy年MM月dd日" これは「2011年12月27日」と表示することを確認できました。 DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy-MM-dd" これは「2011-12-27」と表示することを確認できました。 どのようにしたら"yyyy/MM/dd"形式で表示させることが出来るのでしょうか 指導のほど、よろしくお願い致します。

  • yyyy/mm/ddをyymmddの文字列に

    一つの列にyyyy/mm/dd(日付)とyymmdd(文字列と標準が混在)が混在しているものを、全て文字列のyymmddにするために、区切り位置で全てを文字列にしてから文字操作でyymmddにしようとしてます。 vbaで区切り位置を使用してyyyy/mm/dd(日付)を文字列に変換するとdd/mm/yyyyと表示されてしまいます。vbaでやらずにそのまま区切り位置で文字列に変換するとそのままyyyy/mm/ddの表示のままなのに、vbaでやるとなぜdd/mm/yyyyになってしまうのでしょうか? vbaで日付yyyy/mm/ddを文字列yyyy/mm/ddに変換する方法を教えてください。 よろしくお願いいたします!

  • エクセルで日付をyyyy/mm/ddにしたい

    今 A1=S B1=30303 というでーたがあり二つのセルを組み合わせて 最終的にyyyy/mm/ddしたいのです。 ひとまず、S30303にして結合させて、TXTにして エクセルで読み込む際に日付形式にして読み込ませると、日付形式になったのですが、 年の桁数が二桁のものだけはそのままの数字のままで読み込んでしまいます。 他に方法があれば、他のやり方でもいいのですが、 yyyy/mm/ddにするにはどうしたらいいのでしょうか ご教授ください

  • yyyy/mm/ddの日付に一括変換するマクロ

    [セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。 たとえば、日付データが列Aにある場合にはDATE関数で、 =DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2)) でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。 このためマクロを使用して処理させたいです。 添付のサンプルの例で一括変更するマクロを教えてください。 なお、Excelは2007を使用しています。

  • yyyy/M/dをyyyy/MM/ddに変換

    SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。 現状yyyy/M/d(2010/1/1)のようになっているのをyyyy/MM/dd(2010/01/01)に変換したい のですが方法が分かりません。 SELECT CONVERT(DATETIME,(CONVERT(VARCHAR(10),テーブルの値)),120) FROM テーブル名 とするとCHAR データ型から DATETIME データ型への変換の結果が日付/時刻の値の範囲外です。 というエラーになっていまいます。どういった方法なら実現できるのでしょうか。 すみませんがご教授ください。 宜しくお願い致します。

  • yyyy/mm/ddからyyyy/mmへの変換

    いつもお世話になっております. Excelの第3列の2行目~2027行目までのセルに yyyy/mm/dd と入力されています. dd (日付)を取り除き,yyyy/mm という入力に直したいのですが,方法が分からずに困っております. Sub test() Dim row As Integer For row = 2 To 2027    Sheets("Sheet1").Cells(row, 3).NumberFormat = "yyyy/mm" Next End Sub 上記のようにしてみたのですが,セルの表示形式が変わっただけで, 数式バーの表示を見てみると実質的に dd が残っています. 良い方法をご存知の方がいらっしゃいましたら, ご教示の程どうぞ宜しくお願いいたします.

  • 14桁の日付(YYYYMMDDHHMMSS)を日付(YYYY/MM/DD)に変換できますか?

    データとして14桁の値で日付が登録されています。 この14桁の値(YYYYMMDDHHMMSS)を日付(YYYY/MM/DD)に変換できますか? やりたい事はこの14桁の値から現在の日付から過去1年以内のデータを取得したいと思っていますが・・・ どのようにしたらいいのでしょうか? 申し訳ありません、アドバイスいただけませんでしょうか? 宜しくお願いします。

  • 【Access】できればクエリにて 日付(yyyy/mm/dd)+時間(hh:mm)の計算 

    いつもお世話になります。 フィールド「日付」:日付 (S) ~YYYY/MM/DD形式~ と フィールド「時間」:時刻 (S) ~HH/MM形式~ があります。 これらを合算し、 (1)日付 (標準)  ~YYYY/MM/DD HH:MM:SS形式~ (2)日付 (標準?) ~YYYY/MM/DD HH:MM形式~ にしたいのですが、 レコードの更新欄ではどのようにビルドさせればよろしいでしょうか? 教えていただけますでしょうか? よろしくお願いします。

  • YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法

    YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法 お世話になっております。 今回の質問内容なのですが、 あるテーブルにYYYYMMDDhhmmss形式(varchar(14))の列がありまして、 この値の時刻計算を行いたいと思っております。 YYYY/MM/DD hh:mm:ss形式であれば、DATEADD関数で 計算が可能なのですが、やり方がわからず苦戦しております。 例えば1秒加算させたいと思い、以下のSQL文を実行してみたのですが、 SELECT DATEADD(second,1,(CONVERT(DATETIME,'20100312111111'))) 「文字列から日付/時刻に変換できませんでした。」というエラーが 発生してダメでした。 時刻部分だけ取り出して、それに時分秒を分ける「:」をつけて変換し 計算するという方法は極力避けたいと思っています。 何かいい方法がありましたら、ご教示のほどよろしくお願い致します。

  • yyyy/mm/ddとユーザー定義しても…

    エクセル2010です。 日付を 2012/08/09 などの形で入れたいのですが yyyy/mm/ddとセルの設定でユーザー定義しても 2012/8/9 のように、二桁の場合に0が消えてしまいます。 日付はctrl + で入れているのですが それがよくないのでしょうか。 ctrl + で入れても 2012/08/09 など0のつく形にするにはどうすればよいですか?