質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

6回答

1730閲覧

【PHP】DBから取り出した年月をうまく表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2016/06/23 05:43

編集2016/06/23 05:43

【ソース】

PHP

1<!DOCTYPE html> 2<html> 3<head> 4 <title>日付選択</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf8"> 6</head> 7 8<style type="text/css"> 9h1{ 10 text-align: center; 11 margin-top: 100px; 12} 13</style> 14 15<body> 16<?php 17 18//DBから取り出したDate型の値とする 19$values = array("2016-04-01","2016-04-02","2016-04-03","2016-04-04","2016-04-05"); 20$value = $values[4]; 21 22$tmp_arr = array(); 23for ($t=0; $t < count($values); $t++) { 24 if($values[$t] == $value){ 25 continue; 26 } 27 28 if($values[$t][4] == "-"){ 29 $values[$t][4] = "年"; 30 } 31 if($values[$t][7] == "-"){ 32 $values[$t][7] = "月"; 33 } 34 35 echo $values[$t]."日".nl2br("\n"); 36} 37 38?> 39</body> 40</html>

【上記のソース実行結果】
イメージ説明

【理想の実行結果】
イメージ説明

【問題】
以上の結果のように、�文字になってしまいます。そこの文字をそれぞれ年、月としたいのですが、うまくいきません。

【自己分析】
�文字のところはおそらく日本語なので2バイトを超えているので、日本語がおさまっていないように思えます。実際ローマ字にすれば、うまくいきました。(しかしstrと値を入れたとしてもsだけえ表示される)

【質問】
DBから取り出した年月をうまく表示するため、上記のソースのように「-」文字を判定して、年と月の値をそれぞれ割り当てたつもりですが、うまくいきません。
上記のソースのやり方以外のコーディング方法があれば、教えてください。お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

日付はdateTimeオブジェクトとして扱うか、date関数を使うと、差分計算が出来たり曜日が出せたりで色々便利なのでお勧めです。

公式
参考URL
例(参考URLから引用)

PHP

1date_default_timezone_set("Asia/Tokyo"); 2//DBから取り出したDate型の値とする 3$d = new Datetime("2016-04-01"); 4var_dump($d->format('Y年m月d日'));//string(17) "2016年04月01日"と表示 5

投稿2016/06/23 06:05

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

正規表現で置き換えてしまうのがいちばん楽です。

php

1$display_str = preg_replace('/^(\d{4})-(\d{2})-(\d{2})$/', '$1年$2月$3日', $values[$t]);

投稿2016/06/23 05:47

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/23 05:52

毎回ご回答ありがとうございます。うまくいきました!! これが正規表現というものですね!大変勉強になりました。
guest

0

php

1echo date('Y年m月d日', strtotime($values[$t])) ."<br>";

strtotime関数は便利でよく使います。

投稿2016/06/23 08:13

otom

総合スコア35

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/23 08:25

ご回答ありがとうございます。ここまでシンプルで簡単にできるのですね!! 大変勉強になりました。
guest

0

すみません、質問意図と違うようなので以下の内容は気にしないでください…

PHPが保存されている文字コード、DBの文字コードを確認してください。ちぐはぐなようでしたら統一してください。また、その文字コードに合わせてHTMLのheadタグ内に以下のようなタグを埋め込むことで文字化けを防ぐことができます。

<meta charset="UTF-8">

投稿2016/06/23 05:49

編集2016/06/23 05:50
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2016/06/23 05:51

すでに<meta http-equiv="Content-Type" content="text/html; charset=utf8">が入っていますし、漢字のうち1バイトしか入っていないのが要因なので、文字コード設定が間違っているから発生するわけではないです。
guest

0

php.iniの文字コード設定とApacheのhttpd.confの文字コードがどうなっているのでしょうか?
UTF-8に統一すれば終わる話だと思いますが。

投稿2016/06/23 07:12

nakamori-daisuk

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanat

2016/06/23 07:19

今回のケースは文字コードの問題ではなく、 > $values[$t][4] = "年"; の部分で文字列に対して添字でアクセスしているが、 この仕様がマルチバイトに対応していないという問題のため、 php.iniやapacheのconfでは解決できませんね。
guest

0

$values[$t]をexplodeしてはいかがでしょうか?

PHP

1$date = explode("-", $values[$t]); 2echo $date[0]."年".$date[1]."月".$date[2]."日<br>";

投稿2016/06/23 05:52

bloom

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/06/23 05:55

ご回答ありがとうございます。正規表現以外にexplodeも使えるのですね!! 大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問