1

私はいくつかのタイミング文字列を持っています、

$timing_strings =array(1=>'just now', 2=>'3 minutes ago', 3=>'3 weeks ago');

問題は、そのタイプの文字列を特定の日時形式に変更したいということです。これどうやってするの..?次のような出力が必要です。

array(
1=>'2013-10-04 06:24:24',
2=>'2013-10-04 06:21:24',
3=>'2013-09-14 06:24:24'
);

私はこれに対する解決策を得ることができませんでした。前もって感謝します

4

4 に答える 4

2

文字列を日付に解析することと、値を変換することの2つの別々の問題があります。

最終的に文字列を現在まで解析することは、複雑な問題です。 strtotimeほとんどの日付形式をDateTime解析できますが、すべてではありません。たとえば、「ただ今」を解析しません。もちろん、独自のハードコードされた値でそれを拡張できます。

ただし、値の変換は簡単です。

array_map(
    function ($dateString) {
        if ($dateString === 'just now') {
            $dateString = 'now';
        }
        return (new DateTime($dateString))->format('Y-m-d H:i:s');
    },
    $timing_strings
);
于 2013-10-04T12:58:25.780 に答える
1

ほとんどの時間文字列を次のように変換できるはずですstrtotime

于 2013-10-04T12:58:55.897 に答える
1

これを試して:

<?
$timing_strings =array(1=>'just now', 2=>'3 minutes ago', 3=>'3 weeks ago');
foreach ($timing_strings as $time){
    if ($time == 'just now') $time = 'now';
    $arrTime[] = date("Y-m-d H:i:s",strtotime($time));
}

print_r($arrTime);
?>

作業コード

于 2013-10-04T13:05:14.570 に答える
0

このコードを使用しました:

<?php

$timing_strings =array(1=>'just now', 2=>'3 minutes ago', 3=>'3 weeks ago');
$new_arr=array();
foreach ($timing_strings as $time) {
    $new_arr[]  = check_time($time);
}

echo "<pre>";
print_r($new_arr);
echo "</pre>";
exit;

function check_time($time) {
    if (strpos($time,'just now') !== false) {
        return  date("Y-m-d H:i:s",strtotime('now'));
    }elseif (strpos($time,'minutes ago') !== false) {
        return  date("Y-m-d H:i:s",strtotime('-'.(int)$time.' minutes'));
    }elseif (strpos($time,'weeks ago') !== false) {
        return  date("Y-m-d H:i:s",strtotime('-'.((int)$time*7).' days'));
    }
}

出力

Array
(
    [0] => 2013-10-04 18:47:44
    [1] => 2013-10-04 18:44:44
    [2] => 2013-09-13 18:47:44
)
于 2013-10-04T13:16:48.280 に答える