Welcome Guest, Not a member yet? Register   Sign In
How to insert NOW() in DATETIME field
#1

I'm building a seeder to populate the database, but I'm not able to set NOW() in DATETIME fields. How can I do it?

I tried this:
PHP Code:
    public function run() {
        helper('date');
        $now now();
        
        $data 
= [
            [
                'user_id' => 1,
                'group_id' => 1,
                'created_at' => $now,
                'updated_at' => $now
            
],
            [
                'user_id' => 1,
                'group_id' => 2,
                'created_at' => $now,
                'updated_at' => $now
            
],
            [
                'user_id' => 2,
                'group_id' => 2,
                'created_at' => $now,
                'updated_at' => $now
            
]
        ];

        $this->db->table('back_user_groups_rel')->insertBatch($data);
    

And also with literal 'NOW()' here:
PHP Code:
$now 'NOW()'

None of them works.
Reply
#2

(This post was last modified: 09-29-2020, 06:53 AM by nc03061981.)

now() return int, datetime field is string
So
Code:
$now = date('Y-m-d H:i:s', now());

Learning CI4 from my works, from errors and how to fix bugs in the community

Love CI & Thanks CI Teams

Reply
#3

Thank you!
Reply
#4

Here is a helper method I wrote to do just that.

PHP Code:
// -----------------------------------------------------------------------

/**
 * Method for MySQLi NOW()
 */
if ( ! function_exists('now'))
{
    
/**
     * -------------------------------------------------------------------
     * now ()
     * -------------------------------------------------------------------
     *
     * @return string
     */
    
function now() : string
    
{
        return 
date("Y-m-d H:i:s");
    }

What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#5

(This post was last modified: 03-06-2024, 12:50 AM by joho.)

As has been pointed out in other posts, it should, however, be noted that this is not necessarily the same as the NOW() function in MySQL since that uses the time on the DB-server, and not on the server running PHP.

In some environments, this won't matter, but for others it may.

Perhaps this answer should be updated for CI4 and point in this direction:

Code:
new RawSql('NOW()');

-joho
Reply
#6

Here is the full listing of it.

w3resurce - MySQL NOW() function

Note: The date and time is returned as "YYYY-MM-DD HH-MM-SS" (string) or as YYYYMMDDHHMMSS.uuuuuu (numeric).
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#7

You can also use the Time Class.

CodeIgniter 4 User Guide - Times and Dates - now()

PHP Code:
<?php

use CodeIgniter\I18n\Time;

$now = new Time('now');

    'created_at' => $now,
    'updated_at' => $now
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#8

(03-11-2024, 11:37 PM)InsiteFX Wrote: You can also use the Time Class.

CodeIgniter 4 User Guide - Times and Dates - now()

PHP Code:
<?php

use CodeIgniter\I18n\Time;

$now = new Time('now');

    'created_at' => $now,
    'updated_at' => $now

I can, but won't that also use the server time from where PHP is running, rather than where MySQL is running? ?

-joho
Reply
#9

No, you can specify what time to use.

PHP Code:
$myTime = new Time('now''America/Chicago''en_US'); 
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#10

(03-12-2024, 02:01 AM)InsiteFX Wrote: No, you can specify what time to use.

PHP Code:
$myTime = new Time('now''America/Chicago''en_US'); 

Fair enough, but it requires that I know what timezone the database server is using. We don't need to nitpick this one Cool , I just wanted to point it out Smile

-joho
Reply




Theme © iAndrew 2016 - Forum software by © MyBB