2015-03-02 96 views
1

您好我想根據東部時間保存的日期和時間,我sequelize型號是:時間戳sequelize 1.7.3

var objName= sequelize.define('tbl_name',{ 
     orders_id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, 
     customers_id:Sequelize.INTEGER,   
     date_purchased: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }, 
     order_total:Sequelize.INTEGER, 


    }, 
    { 
     tableName: 'tbl_name', 
     timestamps: false 
    }); 

現在我想在它以某種方式使用時間戳和想要保存(東部標準時間),有人可以指導我如何做到這一點。

注:我使用mysql和sailsjs。 謝謝。

編輯

也用於以下兩個片段,但隨後將其保存0000-00-00 00:00:00

date_purchased: { type: Sequelize.DATE, defaultValue: sequelize.literal("FROM_UNIXTIME(UNIX_TIMESTAMP() + (3600 * 2))") }, 

date_purchased: { type: Sequelize.DATE, defaultValue: sequelize.literal("(now() at time zone 'EST')") } 
+0

是否要在東部時間保存日期以在東部時間顯示日期。我不想再猜你的問題,但大多數日期都以UTC保存,然後顯示在有問題的時區。 – Meeker 2015-03-02 16:18:41

+0

你如何使用sails.js和sequelize? sails.js使用水線ORM – 2015-03-03 02:48:30

+0

@Meeker是的,我想保存日期和時間到EST – 2015-03-03 15:48:52

回答

0

你會想操縱你的時間(加,減,比較)?如果不是,那就把它們保存爲預格式化的字符串。

否則,你會遇到問題,這種方法拯救超越帆船的「東部時間」。記住eastertime和UTC一樣,只是有一個偏移量,而這個偏移量的變化取決於你在夏令時還是沒有。

默認情況下,MySQL將在內部使用系統時區,但可以爲MySQL服務器全局甚至每次事務定義不同的時區。但是,MYSQL仍然會在UTC中節省時間,所有告訴MYSQL將在讀/寫過程中轉換,就好像我們在東部時區一樣。

當處理許多變量時,如應用程序服務器,數據庫適配器和最終數據庫,這可能會非常棘手。

最安全的做法是將所有日期保存爲UTC(將您的服務器設置爲UTC系統時間),然後通過應用程序層將它們顯示在正確的時區中。

你必須問自己。 「我的日期從哪裏來」。它們是否都在數據庫本身中生成(如上面的代碼)?它們是由應用程序服務器生成的(例如,創建日期然後插入它的sails)或日期來自客戶端(瀏覽器有自己的時區問題)。

如果您確實想操縱/比較它們,那麼您最好確保您的日期保存UTC,然後在顯示給用戶時操作時區。考慮夏令時(這個周​​末改變!)。

如何完成此操作將取決於您的設置和回答上面發佈的許多問題。

我知道我前一段時間停止使用日期/時間方法,而是使用整數將所有日期與UnixTimestamp一起存儲。然後在向客戶展示之前將其格式化爲正確的時區。這可以確保我的日期不會被過度轉換,無論我使用哪個數據庫或服務器在哪裏。這只是一種個人喜好,但我覺得它讓人頭痛不已。