0

一部を書き換えている xml ファイルがあり、str_replace ごとにタイムスタンプをミリ秒 (または秒) ずつインクリメントする必要があります。インクリメントとタイムスタンプに秒を追加するためのチュートリアルを見つけましたが、ループ中または各置換インスタンスで時間を追加するためのものではありません。

私の置換コードは次のようになります。

$data = str_replace("</tag1><tag2>", "</tag1><myDate>".date(DATE_ATOM)."</myDate><tag2>", $data);

(明確にするために、ファイルには上記のパターンの複数のインスタンスがあります)

そのままの置換は機能しますが、発生するたびに日付文字列にミリ秒または秒を追加する方法がわからないため、それらはすべて一意です。

ありがとう!

アップデート:

正しい方向に向けてくれた vascowhite に感謝します。これを DOM 操作と組み合わせる必要がありましたが、うまくいきました。知りたい人のための解決策は次のとおりです。

$domsrc = file_get_contents("output.xml");
$MYdom = new DomDocument();
$MYdom->loadXML($domsrc);
$date = new DateTime();
$oneSecond = new DateInterval('PT1S');

$descriptions = $MYdom->getElementsByTagName('myDate');
foreach($descriptions as $nodeDesciption)
{
    $nodeDesciption->nodeValue = $date->format(DATE_ATOM);
    $date->add($oneSecond);
}
$MYdom->save("DOMoutput.xml");
4

1 に答える 1

0

あなたの質問を 100% 理解しているかどうかはわかりませんが、答えてみます。

最初に現在の時刻を取得し、ループの外で増分期間 (1 秒) を設定する必要があります。

$date = new \DateTime();
$oneSecond = new \DateInterval('PT1S');

次に、ループ内で現在のコードを次のコードに置き換えます:-

$data = str_replace("</tag1><tag2>", "</tag1><myDate>".$date->format(DATE_ATOM)."</myDate><tag2>", $data);
$date->add($oneSecond);

私が使用した DateTime クラスについては、マニュアルを参照してください。

于 2013-08-19T20:19:39.727 に答える