dポイントプレゼントキャンペーン実施中!

うまく言葉にできないので、phpでやりたいことを具体的に羅列してみました。

1980年1月1日→19800101
1980年1月11日→19800111
1980年11月1日→19801101
1980年11月11日→19801111

MYSQLには上記のように○○○○年○月○日という形式で保存されています。
そのデータをPHPで○○○○○○○○という8桁の数字にしたいと思っています。

困っているのが1月の人もいれば11月の人もおり、1日の人もいれば11日の人もいるため
1桁のところにゼロを追加したいのですが、その方法が分かりません。

どうかよろしくお願いいたします。

A 回答 (5件)

例えばこう書き換えてみては?



$pattern="/(\d{2,4})年(\d{1,2})月(\d{1,2})日/";
$replacement=function($x){
return $x[1]*10000+$x[2]*100+$x[3];
};
foreach(array("1980年100月100日","1980年1月1日","1980年1月11日","1980年11月1日","1980年11月11日") as $val){
print preg_replace_callback($pattern,$replacement,$val)."<br>";
}

ちなみに5.3となると相当環境が古いので7とは言わないのでせめて5.6くらいまでは
アップグレードしておいたほうがよいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます!今度はちゃんと動作し、思い通りの表示にすることができました。
ただ、同じプログラムを別のサーバーでも動かしているのですが、そちらはPHP5.1.6だったためか、うまく表示することができませんでした。
しかもそちらのサーバーではエラー表示をしない設定にしているため、どこでダメになったのかまで分かりませんでした。
PHP5.1.6だと教えていただいたプログラムは難しいのでしょうか?
何度も申し訳ございませんが、よろしくお願いいたします。

お礼日時:2018/11/09 21:25

<?php


$arr = array("1980年11月9日","1980年1月11日","1980年11月1日","1980年11月11日");
$now_year = date('Y');
$now_monthday = date('md');
foreach($arr as $str) {
$time = strtotime(preg_replace("/¥D+/","-",$str)."0");
$date = date("Ymd",$time);
$year = date("Y",$time);
$monthday = date("md",$time);
$age = $now_year-$year-($now_monthday<$monthday?1:0);
printf("%s→%s Age%s¥n",$str,$date,$age);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
コピペしてみたところ、
1980年11月9日→19700101 Age48¥n1980年1月11日→19700101 Age48¥n1980年11月1日→19700101 Age48¥n1980年11月11日→19700101 Age48¥n
という結果になってしまいました。

お礼日時:2018/11/09 21:29

> Parse error: syntax error, unexpected '['


> というエラーが出てしまいました。

まさかとは思いますが、相当古いPHPで処理してたりします?
バージョンわかりませんか?
    • good
    • 0
この回答へのお礼

おっしゃるとおり、PHP 5.3.3を使っています。

お礼日時:2018/11/09 18:27

その元のデータは、どの型なのでしょう?


元から文字列だったら置換する必要がありますが、
元が日付型なら、date_formatとかの日付→文字列変換でできるのでは?
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
元のデータはvarchar型に文字列として保存されています。
ご指摘の通り、文字列から置換して、再度それを現在の年齢として表示したいのですが・・・

お礼日時:2018/11/09 17:38

こんな感じ



$pattern="/(\d{2,4})年(\d{1,2})月(\d{1,2})日/";
$replacement=function($x){
return $x[1]*10000+$x[2]*100+$x[3];
};
foreach(["1980年100月100日","1980年1月1日","1980年1月11日","1980年11月1日","1980年11月11日"] as $val){
print preg_replace_callback($pattern,$replacement,$val)."<br>";
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
そのままコピペしてみたのですが、

foreach(["1980年100月100日","1980年1月1日","1980年1月11日","1980年11月1日","1980年11月11日"] as $val){

の行で

Parse error: syntax error, unexpected '['

というエラーが出てしまいました。

本当は下記ページのように「PHPで生年月日から現在の年齢を算出する」ということをやりたかったのですが
https://hacknote.jp/archives/17285/
DBに格納してあるデータが1990-10-30形式ではなく、文字列として○○○○年○月○日というものだったため、遠まわしに質問してしまった次第です。

○○○○年○月○日という文字列からダイレクトに現在の年齢を算出する方法があればいいのですが、ネットで調べても出てきませんでした。

ややこしくて申し訳ありませんが、もしお分かりになるようでしたらあわせて教えていただけると幸いです。

お礼日時:2018/11/09 17:37

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