php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #71062 pg_convert() doesn't accept ISO 8601 for datatype timestamp
Submitted: 2015-12-08 14:19 UTC Modified: -
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: denver at timothy dot io Assigned:
Status: Closed Package: PostgreSQL related
PHP Version: 7.0.0 OS: Mac OS 10.11.1
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: denver at timothy dot io
New email:
PHP Version: OS:

 

 [2015-12-08 14:19 UTC] denver at timothy dot io
Description:
------------
pg_convert() does not accept an ISO 8601 date/time string, but will if the character "T" is replaced with whitespace. This is inconsistent with the constant DateTime::ISO8601 and date("c").

I believe if the regex in pgsql.c for case PG_TIMESTAMP (line 6165) can be improved (see patch).

Test script:
---------------
$db = pg_connect("dbname=test user=test");

pg_query($db, "CREATE TABLE public.test_table ( test_field TIMESTAMPTZ )");

// ISO 8601 (with 'T' between date and time)
$date_string_php_iso8601 = date_create('8 Dec 2015 5:38')->format(DateTime::ISO8601);

// ISO 8601 with the 'T' removed
$modified_format = 'Y-m-d H:i:sO';
$date_string_modified_iso8601 = date_create('8 Dec 2015 5:38')->format($modified_format);

printf("trying format %s \n", DateTime::ISO8601);
pg_convert($db, 'public.test_table', ['test_field' => $date_string_php_iso8601]);

printf("trying format %s \n", $modified_format);
pg_convert($db, 'public.test_table', ['test_field' => $date_string_modified_iso8601]);

print "done\n";

pg_query($db, "DROP TABLE test_table");


Expected result:
----------------
trying format Y-m-d\TH:i:sO 
trying format Y-m-d H:i:sO 
done


Actual result:
--------------
trying format Y-m-d\TH:i:sO 
PHP Notice:  pg_convert(): Expects NULL or string for PostgreSQL timestamptz field (test_field) in /Users/dlt/Desktop/bug.php on line 16

Notice: pg_convert(): Expects NULL or string for PostgreSQL timestamptz field (test_field) in /Users/dlt/Desktop/bug.php on line 16
trying format Y-m-d H:i:sO 
done


Patches

pg_convert_fix_iso_8601 (last revision 2015-12-08 14:20 UTC by denver at timothy dot io)

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-04-15 11:42 UTC] ab@php.net
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=d263616525450026bc36b263d2777fd092cf432b
Log: Fixed #71062 pg_convert() doesn't accept ISO 8601 for datatype timestamp
 [2016-04-15 11:42 UTC] ab@php.net
-Status: Open +Status: Closed
 [2016-07-20 11:32 UTC] davey@php.net
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=d263616525450026bc36b263d2777fd092cf432b
Log: Fixed #71062 pg_convert() doesn't accept ISO 8601 for datatype timestamp
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 16 16:01:28 2024 UTC