- 締切済み
日付のフォーマットを操作する
変換前 "2007-11" "2008" "2009-12-1" "2009-12-12" "2007-11 11:59" "2007-11 11:59:12" "2007-11 11" 上記のような日付の文字列を指定したフォーマットで出力したいです。 もっとも効率の良いやり方を教えて下さい。 変換後 "20071100000000" "20080000000000" "20091201000000" "20091212000000" "20071100115900" "20071100115912" "20071100110000"
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- fdsjaklfjas
- ベストアンサー率81% (96/118)
一行になりました。 #正規表現を使うので、効率(速度)は悪いと思います。 function hoge($str) { return preg_replace('/^(\d+)(-(\d+))?(-(\d+))?( (\d+))?(:(\d+))?(:(\d+))?$/e', 'sprintf("%04d%02d%02d%02d%02d%02d", "$1","$3","$5","$7","$9","$11")', $str); }
- ham_kamo
- ベストアンサー率55% (659/1197)
「もっとも」効率がよいかどうかわかりませんが…。 <?php $date_array = array("2007-11","2008","2009-12-1","2009-12-12","2007-11 11:59","2007-11 11:59:12","2007-11 11"); foreach($date_array as $val) { echo convert_datetime_format($val) . "<br />"; } function convert_datetime_format($date_time_str) { $date_time = split(" ",$date_time_str); $ymd = split("-",$date_time[0]); while (count($ymd) < 3) array_push($ymd,0); if (count($date_time) == 1) { $hms = array(0,0,0); } else { $hms = split(":",$date_time[1]); while (count($hms) < 3) array_push($hms,0); } $str = sprintf("%04d%02d%02d%02d%02d%02d",$ymd[0],$ymd[1],$ymd[2],$hms[0],$hms[1],$hms[2]); return $str; } ?>
- yambejp
- ベストアンサー率51% (3827/7415)
たとえばこんな感じでしょうか? <?PHP $str="2007-11"; print change($str)."<br>"; $str="2008"; print change($str)."<br>"; $str="2009-12-01"; print change($str)."<br>"; $str="2009-12-12"; print change($str)."<br>"; $str="2007-11 11:59"; print change($str)."<br>"; $str="2007-11 11:59:12"; print change($str)."<br>"; $str="2007-11 11"; print change($str)."<br>"; function change($str){ list($date,$time)=split(" ",$str); list($year,$month,$day)=split("-",$date); list($hour,$minute,$second)=split(":",$time); $month =substr("00".$month,-2); $day =substr("00".$day,-2); $hour =substr("00".$hour,-2); $minute =substr("00".$minute,-2); $second =substr("00".$second,-2); $str=$year.$month.$day.$hour.$minute.$second; return $str; } ?>
お礼
回答ありがとうございます。 正規表現で1行で書けないかなと思ってまして、"2007-11 11:59"がなかなかうまくいかず・・・。
お礼
回答ありがとうございます。 正規表現で1行で書けないかなと思ってまして、"2007-11 11:59"がなかなかうまくいかず・・・。 うまくいってませんが、途中経過です。 sprintf("%-014s",ereg_replace("^([0-9]+)-?(0?[0-9]*)-?(0?[0-9]*) ?(0?[0-9]*):?(0?[0-9]*):?(0?[0-9]*)","\\1\\2\\3\\4\\5\\6",$s));