微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 knex.fn.now() 自动添加日期的 knex 和时区

如何解决使用 knex.fn.now() 自动添加日期的 knex 和时区

我在 express 中使用 knex.js。 当我插入或更新一些记录时,我遇到了一个问题,我得到了服务器的时间戳,而不是我使用以下指令在 express 中设置的时间戳。

process.env.TZ = 'Asia/Karachi';

虽然只要我现在在 express 中使用上述方法就可以正常工作,但是当我插入一条记录时,时区是服务器的而不是我指定的时区,所以我用谷歌搜索并找到了几种解决方案。 以下是我的迁移之一:

import * as Knex from 'knex';

export async function up(knex: Knex): Promise<void> {
    return knex.schema.createTable('companies',function(table: Knex.TableBuilder) {
        table.bigIncrements().primary();
        table.string('name',255).notNullable();
        table.text('address').notNullable();
        table.string('slug').notNullable();
        table.string('mobile').notNullable();
        table.enu('status',[ 'enable','disable' ]).notNullable().defaultTo('enable');
        table.enu('type',[ 'sole','distribution','both' ]).notNullable();
        table.timestamp('created_at').defaultTo(knex.fn.Now());
        table.timestamp('last_updated_at').defaultTo(knex.fn.Now());
    });
}

export async function down(knex: Knex): Promise<void> {
    return knex.schema.dropTableIfExists('companies');
}

如您所见,我在创建迁移时添加了 knex.fn.Now 作为认时间。

作为解决方案,我尝试了以下方法,但它们对我不起作用:

module.exports = {
    development: {
        client: CLIENT,connection: {
            database: DATABASE,user: PG_USER,password: PASSWORD,host: HOST,timezone: '+05:00'
        },migrations: {
            tableName: 'knex_migrations'
        }
    },staging: {
        client: CLIENT,pool: {
            min: 2,max: 10
        },production: {
        client: CLIENT,migrations: {
            tableName: 'knex_migrations'
        }
    }
};

我也尝试在生产连接下设置为以下也不起作用。

时区:“亚洲/卡拉奇”

我也尝试在生产池中添加 afterCreate 方法,但也没有奏效。

pool: {
    afterCreate: function(connection,callback) {
      connection.query('SET time_zone = Asia/Karachi;',function(err) {
        callback(err,connection);
      });
    }
 }

当我添加一条记录时,我没有为时间戳分配日期,所以我在 2021-01-22T02:53:53.000Z 创建的时间是早上 12:am。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。