2011-08-29 28 views
5

Tôi có trường loại ngày, 2011-07-20 làm ví dụ về định dạng, mà tôi cần chuyển đổi sang UTC để sử dụng trong javascript. Tôi biết tôi có thể sử dụng Date.UTC trong javascript nhưng sau đó tháng bị tắt bởi một và nó không có dấu gạch ngang như dấu phân cách.Rails 3 Ngày tới UTC để sử dụng trong javascript

Làm cách nào để chuyển đổi định dạng ngày đường ray mặc định thành UTC?

Trả lời

13

Trong một bộ điều khiển

@time = Time.parse('2011-07-20').utc.to_i*1000 

Trong một cái nhìn

<script type="text/javascript"> 
    var date = new Date(<%= @time %>); 
    alert(date); 
</script> 
+1

Tôi đã rối tung lên vì tôi không có chuỗi được phân tích để phân tích cú pháp. Tôi đã bỏ trường ngày tháng của tôi như trong Time.parse (date_var) .utc.to_i và tôi gặp lỗi. Nó có vẻ khá kỳ quặc mà chúng ta phải chuyển đổi một biến ngày thành một chuỗi để có được UTC. Có lẽ không hiệu quả nhất nhưng nó hoạt động. Cảm ơn... – Xaxum

1

Giả sử bạn có một chuỗi '2011/07/20', sau đây sẽ giúp

Time.parse('2011-07-20').utc 
4

Chỉ cần để thêm tùy chọn khác (bắt nguồn từ câu trả lời của kreeks):

Bạn có thể khỉ vá lớp Time trong một initializer để thêm một phương pháp to_js:

class ::Time 
    def to_js 
    self.utc.to_i*1000 
    end 
end 

và sau đó sử dụng chức năng này trong JavaScript:

var date = new Date(<%= Time.parse('2011-07-20').to_js %>); 
console.log(date); 

Hope this helps.

1

Các câu trả lời ở trên không có tác dụng đối với tôi vì tôi nhận thấy rằng tôi đã không phù hợp với múi giờ. Đối ngày sau trong javascript (lưu ý tháng là zero-lập chỉ mục trong js)

var date1 = Date.UTC(2014, 0, 1) 

để có được giá trị giống hệt nhau trong Ruby Tôi đã làm điều này: -

t = Date.new(2014,01,01).to_time 
t += t.utc_offset 
@timestamp1 = (t.to_i * 1000) 

Sau đó, để xác minh trong js

var timestamp1 = <%= @timestamp1 %>; 
var timestamp2 = Date.UTC(2014, 0, 1); 
var date1 = new Date(timestamp1); 
var date2 = new Date(timestamp2); 
$("#div1").text("Ruby => " + date1.toUTCString() + ', Tz offset =>' + date1.getTimezoneOffset()); 
$("#div2").text("JS => " + date2.toUTCString() + ', Tz offset =>' + date2.getTimezoneOffset()); 
Các vấn đề liên quan