将 01 Januari 从字符串更改为 1 月

change 01 Januari to january from string

我试过这个并在字符串 2017 上取得了成功,但是 2018 年有 2 个月是这样的..编辑我的正则表达式的哪一部分使字符串 2018 刚好得到一月。重点是使字符串 2018 与 2017 相同。

如何将 1 月 1 日更改为 1 月

2018 年字符串

File=D:\Shared\print18 Januari\sembilan\BIRU TUA NO 1-
70_100X200CM-1.tif

来自 TXT 文件的字符串 2017

File=D:\Shared\print17\september\printing\baryun - cetak 
transferpaper.tif

从 TXT 获取数据的代码

foreach (glob("C://xampp/htdocs/Champion/machine-logs/LogCampusMesinMutoh/*.job")as $job) {
        $path           = file_get_contents($job);
        $File           = '/File=(.*)/';
        $PrintSetup     = '/PrintSetup=(.*)/';
        $SourceSizeX    = '/SourceSizeX=(.*)/';
        $SourceSizeY    = '/SourceSizeY=(.*)/';
        $Filelg         = '/File=(.*)/';

        preg_match($File,$path,$Filematch);
        preg_match($PrintSetup,$path,$PrintSetupmatch);
        preg_match($SourceSizeX, $path,$SourceSizeXmatch);
        preg_match($SourceSizeY, $path,$SourceSizeYmatch);
        preg_match($Filelg,$path, $Filelgmatch);

        $kol = $Filelgmatch[1];
        $r   = "/^D:\\[a-zA-Z]+\\[a-z]+\\([0-9]{4})\\([a-z]+)\\([0-9]{1,2})/";

        if (preg_match($r,$kol,$match)){
            $date = $match[3]."-".$match[2]."-".$match[1];

            $xtime = strtotime($date);
            $time = date("Y-m-d",$xtime);
        }

    $dimensi = $SourceSizeXmatch[1]." x ".$SourceSizeYmatch[1];

    $query = "INSERT into CMP.log_file (PRN_DESC,FIL_NM,PRN_DIM,BEG_TS,END_TS) VALUES ('".$PrintSetupmatch[1]."','".$Filematch[1]."','".$dimensi."','".$time."','".$time."')";
    $result = mysql_query($query);
    }

结果日期

BEG_TS                 END_TS
2017-09-26 00:00:00    2017-09-26 00:00:00

此解决方案使用 explode() 解析字符串,使用 str_replace() 翻译月份,使用 preg_match 删除数字月份,最后使用 strtotime() 翻译人类日期, date():

$str = 'File=D:\Shared\print17\september\printing\baryun - cetak transferpaper.tif';
$str = 'File=D:\Shared\print18 Januari\sembilan\BIRU TUA NO 1-70_100X200CM-1.tif';

// remove the 'File='
$str = str_replace('File=', '', $str);

// parse subfolders
$folders = explode('\', $str);

var_dump($folders);
/*
array (size=8)
0 => string 'D:' (length=2)
1 => string 'Shared' (length=6)
2 => string 'print' (length=5)
3 => string '2018' (length=4)
4 => string '01 Januari' (length=10)
5 => string '09' (length=2)
6 => string 'sembilan' (length=8)
7 => string 'BIRU TUA NO 1-70_100X200CM-1.tif' (length=32)
*/

// translate months
$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
$maand= array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
$folders[4] = str_replace($maand, $months, strtolower($folders[4]));

// handle months with numeric values
if(preg_match('/(\d*)?(\w*)$/', $folders[4], $matches)){
  $folders[4] = $matches[2];
}
//
var_dump($matches);
/*
array (size=3)
0 => string 'January' (length=7)
1 => string '' (length=0)
2 => string 'January' (length=7)
*/


// date string aka 'January 09 2018'
$date = "$folders[4] $folders[5] $folders[3]";
//
var_dump($date);
/*
'January 09 2018' (length=15)
*/

$xtime = strtotime($date);
$time = date("Y-m-d H:m:s", $xtime);
var_dump($time); // 2009-01-01
/*
'2018-01-09 00:01:00' (length=19)
*/

简答:
'/(\d*)?(\w*)$/' 查找没有前导数值的月份。

现场演示:https://eval.in/932907