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

変換前
"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"

A 回答 (3件)

一行になりました。


#正規表現を使うので、効率(速度)は悪いと思います。

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);
}
    • good
    • 0

「もっとも」効率がよいかどうかわかりませんが…。



<?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;
}
?>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
正規表現で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));

お礼日時:2006/12/27 15:47

たとえばこんな感じでしょうか?



<?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;
}
?>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
正規表現で1行で書けないかなと思ってまして、"2007-11 11:59"がなかなかうまくいかず・・・。

お礼日時:2006/12/27 15:41

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