2017-02-25 51 views
0

我有一個rails/react應用程序(只有一個應用程序),允許用戶使用Flatpickr安排會議。Rails/React flatpickr momentjs時間轉換

我正在傳遞一個名爲「scheduled_for」的日期時間列,以便我可以在我的反應組件中使用它。

這就是我的「componentDidMount()」的模樣:

componentDidMount =() => { 
    new Flatpickr(this.refs.scheduledFor, { 
     minDate: new Date(), 
     enableTime: true, 
     altInput: true, 
     altFormat: "F j, Y h:i K", 
     onChange: function(dateObject) { console.log(dateObject) } 
    }); 
    } 

有一個在我的會議模式,以防止被安排在過去的會議上「scheduled_for_future」驗證方法。

##app/models/meeting.rb 

validate :scheduled_for_future 

def scheduled_for_future 
    if scheduled_for.present? && scheduled_for < Time.zone.now 
    errors.add(:scheduled_for, "Must be in future") 
    end 
end 

我希望用戶能夠選擇一個日期&時間在他們的本地時區,並將它保存爲UTC(Heroku的默認值)。

一切工作正常在本地開發,但如果我嘗試選擇時間&生產日期,例如說從現在10分鐘,我得到「必須在未來」的錯誤。 (這顯然是因爲我的時區是PT,從現在起10分鐘是根據服務器的時間過去的)

感覺這應該很容易解決。爲了用戶體驗,我希望客戶能夠在自己的時區選擇時間,並在保存之前將其轉換爲UTC,但無法弄清楚。

我對momentjs或flatpickr不是很有經驗,所以很可能我錯過了一些非常重要的東西。

請讓我知道,如果你需要任何更多的信息/東西沒有意義。

萬分感謝

回答

0

您可以使用瞬間格式化客戶端上的日期時間,包括時區偏移。 currDate,在你的情況下將是在你的Flatpickr日曆中選擇的日期時間。

var currDate = new Date(); 
console.log("Current Date: " + moment(currDate).format("YYYY-MM-DD HH:mm:ssZ")); 

// Returns ... 
Current Date: 2017-02-25 09:38:02-05:00 

然後可以傳遞到了軌道,作爲一個字符串,它在數據庫中堅持前轉換爲UTC

2.3.1 :003 > client_date = "2017-02-25 09:38:02-05:00" 
=> "2017-02-25 09:38:02-05:00" 
2.3.1 :004 > utc_date = Time.zone.parse(client_date).utc 
=> 2017-02-25 14:38:02 UTC