0
\$\begingroup\$

Please find the following scenario, I've dynamic JS date format string from API but I am looking for the best way to convert the format that accepts in PHP date format. For now, I wrote it my own way but I doubt there should be a standard solution.

JS time format: YYYY-MM-DD / YYYY/MM/DD
Need PHP format: Y-m-d / Y/m/d

I've written the solution this way, please let me know if you find something else in a better way than this.

function dateFormatStringConvert(string $format) : string
{
    foreach (['-', '/'] as $operator) {
        if (strpos($format, $operator) !== false) {
            return implode($operator, array_map(function ($piece){
                return $piece[0]=='M' || $piece[0]=='D' ? strtolower($piece[0]) : $piece[0];
            }, explode($operator, $format)));
        }
    }
    return 'm-d-Y';
}
\$\endgroup\$
2
  • \$\begingroup\$ is the js code under your control? \$\endgroup\$ – hjpotter92 Dec 31 '20 at 10:01
  • \$\begingroup\$ No. we are using the service of somebody else. \$\endgroup\$ – Arab Dec 31 '20 at 10:08
0
\$\begingroup\$

I don't see the need to do so much dynamic work. I would establish a lookup array to access. This will be clean, direct, and easy to maintain. If the incoming format is not found, just fallback to m-d-Y using the null coalescing operator.

private $formatLookup = [
    'YYYY-MM-DD' => 'Y-m-d',
    'YYYY/MM/DD' => 'Y/m/d',
];

public function dateFormatStringConvert(string $format) : string
{
    return $this->formatLookup[$format] ?? 'm-d-Y';
}

With this setup, you never need to touch the processing method, you only need to maintain the lookup array.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.