Re: Formatting Date (m/d/yyyy) To Timestamp

From: Date: Wed, 13 Jan 2021 14:48:05 +0000
Subject: Re: Formatting Date (m/d/yyyy) To Timestamp
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  Groups: php.general 
Request: Send a blank email to php-general+get-327410@lists.php.net to get a copy of this message
> > Now I don't get any errors, but all the dates come to MySQL as 0000-00-00 > 00:00:00... I am using strtotime with dates in the format: d/m/yyyy > You need to format the dates (before sending them to MySQL) to ISO notation (as string) or as a timestamp (as int) I wrote a minimal example https://pastebin.com/dqyP654z HTH Kind regards/met vriendelijke groet, Serge Fonville http://www.sergefonville.nl Op wo 13 jan. 2021 om 13:50 schreef Talin Sharma <talinsharma.in@gmail.com>: > Now I don't get any errors, but all the dates come to MySQL as 0000-00-00 > 00:00:00... I am using strtotime with dates in the format: d/m/yyyy > > Could you help? > > > Thanks: > Talin Sharma > > > On Wed, Jan 13, 2021 at 5:51 AM Serge Fonville <serge.fonville@gmail.com> > wrote: > >> This might contribute to solving your problem: >> https://stackoverflow.com/a/805880 >> Also check >> https://www.php.net/manual/en/mysqli-stmt.bind-param.php >> >> What it means is that you need to specify the data types in the bind >> definition (contrary to what I said before), you should use convert the >> date field to an ISO date (so you can use it as a string. >> >> Fatal error: Uncaught ArgumentCountError: The number of elements in the >>> type definition string must match the number of bind variables >>> >> This error is correct, since you are using 6 bind variables, bind_param >> expects 7 arguments. >> >> HTH >> >> Kind regards/met vriendelijke groet, >> >> Serge Fonville >> >> http://www.sergefonville.nl >> >> >> Op di 12 jan. 2021 om 14:12 schreef Talin Sharma < >> talinsharma.in@gmail.com>: >> >>> Here is a link: |ãwJDäk¶‚�+ú >>> https://paiza.io/projects/mx5k3SDvxC9lnkDBsm8JYw >>> >>> Also, I fixed the 'd.' thing... I still get the same error. >>> >>> Fatal error: Uncaught ArgumentCountError: The number of elements in the >>>> type definition string must match the number of bind variables in >>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php:64 >>>> Stack trace: #0 >>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php(64): >>>> mysqli_stmt->bind_param('1', false, 1, 1, 1, 1) #1 {main} thrown in >>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php >>>> on line 64 >>> >>> >>> >>> Thanks: >>> Talin Sharma >>> >>> >>> On Mon, Jan 11, 2021 at 8:27 PM Serge Fonville <serge.fonville@gmail.com> >>> wrote: >>> >>>> Fatal error: Uncaught ArgumentCountError: The number of elements in the >>>>> type definition string must match the number of bind variables >>>> >>>> This shows the number of values in your query does not match the amount >>>> of bind variables, you should post your query as well, so we can look at it. >>>> Also, instead of mailing excerpts, it is probably easier to use >>>> something like pastebin to share your entire code. >>>> >>>>> I have also noticed that "DateTime::createFromFormat('d./m/Y', >>>>> $d);" >>>>> returns false... Why? >>>> >>>> The value of $d seemingly does not match the format, perhaps due to the >>>> extra '.' (dot) after the d in the format (or is that intentional?) >>>> >>>> Kind regards/met vriendelijke groet, >>>> >>>> Serge Fonville >>>> >>>> http://www.sergefonville.nl >>>> >>>> >>>> Op di 12 jan. 2021 om 00:53 schreef Talin Sharma < >>>> talinsharma.in@gmail.com>: >>>> >>>>> Without the quotes I get: >>>>> >>>>>> >>>>>> Fatal error: Uncaught ArgumentCountError: The number of elements in >>>>>> the type definition string must match the number of bind variables in >>>>>> >>>>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php:64 >>>>>> Stack trace: #0 >>>>>> >>>>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php(64): >>>>>> mysqli_stmt->bind_param('1', false, 1, 1, 1, 1) #1 {main} >>>>>> thrown in >>>>>> >>>>>> C:\Users\talin\Documents\Code\Web\Projects\Transactions\excel\excelUpload.php >>>>>> on line 64 >>>>>> >>>>> >>>>> What now? >>>>> I have also noticed that "DateTime::createFromFormat('d./m/Y', >>>>> $d);" >>>>> returns false... Why? >>>>> >>>>> Thanks: >>>>> Talin Sharma >>>>> >>>>> >>>>> On Mon, Jan 11, 2021 at 4:59 PM Serge Fonville < >>>>> serge.fonville@gmail.com> wrote: >>>>> >>>>>> When I try : $stmp->bind_param('$des', '$d1', >>>>>> '$a', '$m', '$t', '$s'); >>>>>>> I get: Fatal error: Uncaught Error: mysqli_stmt::bind_param(): >>>>>>> Argument #2 cannot be passed by reference >>>>>> >>>>>> What does that mean? >>>>>> >>>>>> You are converting all values to strings, the whole idea is to >>>>>> maintain the data type, so you should remove the quotes. >>>>>> On top of that, you are using single quotes, so the values are not >>>>>> expanded inside the string. >>>>>> >>>>>> Kind regards/met vriendelijke groet, >>>>>> >>>>>> Serge Fonville >>>>>> >>>>>> http://www.sergefonville.nl >>>>>> >>>>>> >>>>>> Op ma 11 jan. 2021 om 22:44 schreef Talin Sharma < >>>>>> talinsharma.in@gmail.com>: >>>>>> >>>>>>> When I try : $stmp->bind_param('$des', '$d1', >>>>>>> '$a', '$m', '$t', >>>>>>> '$s'); >>>>>>> I get: Fatal error: Uncaught Error: mysqli_stmt::bind_param(): >>>>>>> Argument #2 cannot be passed by reference >>>>>>> >>>>>>> What does that mean? >>>>>>> Thanks: >>>>>>> Talin Sharma >>>>>>> >>>>>>> >>>>>>> On Mon, Jan 11, 2021 at 12:44 PM Serge Fonville < >>>>>>> serge.fonville@gmail.com> wrote: >>>>>>> >>>>>>>> What would I put where you have to tell what type of date(string, >>>>>>>>> number?) >>>>>>>>> >>>>>>>> One of the benefits of prepared statements is that you do not need >>>>>>>> to convert or specify data types. Since the mysqli library handles >>>>>>>> that for >>>>>>>> you. It finds the datatype from the datatype of the variable and >>>>>>>> passes its >>>>>>>> value to the database service. >>>>>>>> >>>>>>>> Kind regards/met vriendelijke groet, >>>>>>>> >>>>>>>> Serge Fonville >>>>>>>> >>>>>>>> http://www.sergefonville.nl >>>>>>>> >>>>>>>> >>>>>>>> Op ma 11 jan. 2021 om 13:42 schreef Talin Sharma < >>>>>>>> talinsharma.in@gmail.com>: >>>>>>>> >>>>>>>>> I can try this but if I use prepared statements, I have >>>>>>>>> multiple >>>>>>>>> fields to insert. What would I put where you have to tell what >>>>>>>>> type of >>>>>>>>> date(string, number?) >>>>>>>>> >>>>>>>>> Thanks: >>>>>>>>> Talin Sharma >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Jan 11, 2021 at 2:42 AM Serge Fonville < >>>>>>>>> serge.fonville@gmail.com> wrote: >>>>>>>>> >>>>>>>>>> I tried and minimize your question to the following code: >>>>>>>>>> >>>>>>>>>> <?php >>>>>>>>>> >>>>>>>>>> $date_from_sheet = "1/1/2021"; >>>>>>>>>> // As you know the format of the date, it is easier to >>>>>>>>>> convert >>>>>>>>>> based on that >>>>>>>>>> $timestamp = DateTime::createFromFormat('d./m/Y', >>>>>>>>>> $date_from_sheet); >>>>>>>>>> >>>>>>>>>> // Instead of inserting the values inside the string, use >>>>>>>>>> bind >>>>>>>>>> variables instead. >>>>>>>>>> $query = "INSERT INTO some_table(date_field) values >>>>>>>>>> (?)"; >>>>>>>>>> // I'm assuming $mysqli is already instantiated >>>>>>>>>> elsewhere >>>>>>>>>> $stmt = $mysqli->prepare($query); >>>>>>>>>> // The only field in the query is the date field, >>>>>>>>>> // so it is clear that the only parameter is the >>>>>>>>>> corresponding >>>>>>>>>> value >>>>>>>>>> $stmt->bind_param($timestamp); >>>>>>>>>> // The only remaining thing to do is execute it. >>>>>>>>>> $stmt->execute(); >>>>>>>>>> ?> >>>>>>>>>> >>>>>>>>>> Does this enable you to solve your issue? >>>>>>>>>> >>>>>>>>>> I used the following sources: >>>>>>>>>> >>>>>>>>>> https://www.php.net/manual/en/mysqli-stmt.bind-param.php >>>>>>>>>> >>>>>>>>>> https://www.php.net/manual/en/datetime.createfromformat.php >>>>>>>>>> >>>>>>>>>> Kind regards/met vriendelijke groet, >>>>>>>>>> >>>>>>>>>> Serge Fonville >>>>>>>>>> >>>>>>>>>> http://www.sergefonville.nl >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Op ma 11 jan. 2021 om 02:18 schreef Talin Sharma < >>>>>>>>>> talinsharma.in@gmail.com>: >>>>>>>>>> >>>>>>>>>>> I have also tried: $d1 = date("Y-m-d H:i:s", >>>>>>>>>>> strtotime($d)); But >>>>>>>>>>> that returns random dates when I insert into the >>>>>>>>>>> database... What is wrong? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Thanks: >>>>>>>>>>> Talin Sharma >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sun, Jan 10, 2021 at 7:10 PM Talin Sharma < >>>>>>>>>>> talinsharma.in@gmail.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Also here is the excel sheet I am using for >>>>>>>>>>>> testing. >>>>>>>>>>>> Thanks: >>>>>>>>>>>> Talin Sharma >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Jan 10, 2021 at 7:05 PM Talin Sharma < >>>>>>>>>>>> talinsharma.in@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> I am attaching all of my code. How do I enter >>>>>>>>>>>>> the timestamp to >>>>>>>>>>>>> the database then? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks: >>>>>>>>>>>>> Talin Sharma >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Sun, Jan 10, 2021 at 7:01 PM Serge Fonville >>>>>>>>>>>>> < >>>>>>>>>>>>> serge.fonville@gmail.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> It doesn't seem to work. What I did: >>>>>>>>>>>>>> $d1 = 'strtotime(' >>>>>>>>>>>>>>> 1/1/2021'); echo $d1;' Echos: >>>>>>>>>>>>>>> '980053200' That in human >>>>>>>>>>>>>>> form is: 'November 30, -0001' >>>>>>>>>>>>>>> Not what I want... any idea >>>>>>>>>>>>>>> why? >>>>>>>>>>>>>> >>>>>>>>>>>>>> You are converting the timestamp to a >>>>>>>>>>>>>> string again using >>>>>>>>>>>>>> echo, this outputs a unix epoch. You should >>>>>>>>>>>>>> instead treat $d1 as >>>>>>>>>>>>>> >>>>>>>>>>>>>> Perhaps if you share a bigger part of your >>>>>>>>>>>>>> code, it would be >>>>>>>>>>>>>> easier to be of help. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Kind regards/met vriendelijke groet, >>>>>>>>>>>>>> >>>>>>>>>>>>>> Serge Fonville >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> http://www.sergefonville.nl >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Op ma 11 jan. 2021 om 00:51 schreef Talin >>>>>>>>>>>>>> Sharma < >>>>>>>>>>>>>> talinsharma.in@gmail.com>: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> It doesn't seem to work. What I >>>>>>>>>>>>>>> did: $d1 = 'strtotime(' >>>>>>>>>>>>>>> 1/1/2021'); echo $d1;' Echos: >>>>>>>>>>>>>>> '980053200' That in human >>>>>>>>>>>>>>> form is: 'November 30, -0001' >>>>>>>>>>>>>>> Not what I want... any idea >>>>>>>>>>>>>>> why? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks: >>>>>>>>>>>>>>> Talin Sharma >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Sun, Jan 10, 2021 at 6:30 PM Serge >>>>>>>>>>>>>>> Fonville < >>>>>>>>>>>>>>> serge.fonville@gmail.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Talin, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Would >>>>>>>>>>>>>>>> https://www.php.net/manual/en/function.strtotime.php >>>>>>>>>>>>>>>> solve your conversion problem? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Kind regards/met vriendelijke >>>>>>>>>>>>>>>> groet, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Serge Fonville >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> http://www.sergefonville.nl >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Op ma 11 jan. 2021 om 00:18 schreef >>>>>>>>>>>>>>>> Talin Sharma < >>>>>>>>>>>>>>>> talinsharma.in@gmail.com>: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi All, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I have a string: >>>>>>>>>>>>>>>>> '1/1/2021'. I want to turn this into a >>>>>>>>>>>>>>>>> timestamp for entering into >>>>>>>>>>>>>>>>> MySql. I have tried everything I could find. >>>>>>>>>>>>>>>>> Please let me know how to >>>>>>>>>>>>>>>>> proceed. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Also, let me know if you need >>>>>>>>>>>>>>>>> more information. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks: >>>>>>>>>>>>>>>>> Talin Sharma >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>

« previous php.general (#327410) next »