Re: [PHP] From 24/7/2013 to 2013-07-24

[email protected] (Jim Giner)
Newsgroups php.general
Message-ID <[email protected]>
On 7/26/2013 5:29 PM, Robert Cummings wrote:
> On 13-07-26 04:38 PM, jomali wrote:
>> On Fri, Jul 26, 2013 at 1:08 PM, Robert Cummings
>> <[email protected]>wrote:
>>
>>> On 13-07-26 11:42 AM, jomali wrote:
>>>
>>>> On Fri, Jul 26, 2013 at 5:18 AM, Karl-Arne Gjersøyen
>>>> <[email protected]
>>>>> wrote:
>>>>
>>>>   Below is something I try that ofcourse not work because of rsosort.
>>>>> Here is my code:
>>>>> -----------------------
>>>>> $lagret_dato = $_POST['lagret_dato'];
>>>>>       foreach($lagret_dato as $dag){
>>>>>
>>>>>           $dag = explode("/", $dag);
>>>>>          rsort($dag);
>>>>>           $dag = implode("-", $dag);
>>>>>           var_dump($dag);
>>>>>
>>>>> What I want is a way to rewrite contents of a variable like this:
>>>>>
>>>>>   From 24/7/2013 to 2013-07-24
>>>>>
>>>>> Is there a way in PHP to do this?
>>>>>
>>>>> Thank you very much.
>>>>>
>>>>> Karl
>>>>>
>>>>>
>>>> $conv_date = str_replace('/', '-','24/7/2013');
>>>> echo date('Y-m-d', strtotime($conv_date));
>>>> Result: 2013-07-24
>>>>
>>>
>>> It would be better if you reformatted first since this is ambiguous when
>>> you have the following date:
>>>
>>>      6/7/2013
>>>
>>
>>> Here's a completely unambiguous solution:
>>>
>>> <?php
>>>
>>>      $old = '24/7/2013';
>>>
>>>      $paddy = function( $bit ){ return str_pad( $bit, 2, '0',
>>> STR_PAD_LEFT
>>> ); };
>>>      $new = implode( '-', array_map( $paddy, array_reverse( explode(
>>> '/',
>>> $old ) ) ) );
>>>
>>>      echo $new."\n";
>>>
>>> ?>
>>>
>>> Cheers,
>>> Rob.
>>
>> The original question was  about reformatting a European (Day/Month/Year)
>> date. Your solution does not address this problem. Mine assumes the
>> European date format explicitly.
>
> Jomali,
>
> Your solution is broken. The original poster requested the following:
>
>  >>>> What I want is a way to rewrite contents of a variable like this:
>  >>>>
>  >>>>   From 24/7/2013 to 2013-07-24
>
> Your solution makes use of the strtodate(). A useful strategy EXCEPT (as
> you have already noted) the date follows the European formatting rules
> of dd/mm/yyyy since the 24 as the first number makes that obvious.
> HOWEVER, you failed to realize the following (from the PHP online manual):
>
>      Dates in the m/d/y or d-m-y formats are disambiguated by looking
>      at the separator between the various components: if the separator
>      is a slash (/), then the American m/d/y is assumed; whereas if
>      the separator is a dash (-) or a dot (.), then the European d-m-y
>      format is assumed.
>
> And so, as soon as an abiguous date arises, the solution will be
> incorrect because strtotime() will presume an American format due to the
> appearance of the slash instead of the hyphen. It is dangerous to rely
> on magical functions like strtotime() unless you completely understand
> how ambiguity is resolved.
>
> Another solution that was posted only re-ordered the elements and you
> likely noticed that there is a single digit 7 in the source date and in
> the response date it has been 0 padded to conform to the standard
> yyyy-mm-dd date format. The other solution does not do this and so it is
> also incorrect.
>
> And so it follows, that my solution, thus far, is the only solution
> posted that actually meets the requirements. Why you think my solution
> does not perform is beyond me since a simple run of the code would
> output the correct answer (yes I did test)-- mine also presumes the
> European ordering for all input with components separated by a slash.
>
> Cheers,
> Rob.
And my solution doesn't work?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.