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, 2020 at 10:01
  • \$\begingroup\$ No. we are using the service of somebody else. \$\endgroup\$
    – Arab
    Dec 31, 2020 at 10:08

1 Answer 1

1
\$\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 and acknowledge that you have read and understand our privacy policy and code of conduct.

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