2011-09-26 31 views
6

Có thể chuyển đổi nhanh chóng giá trị strftime ("% u") thành strftime ("% A") hay không cần tạo một hash tương đương như {"Monday "=> 1, ......... "Sunday"=> 6}Ruby: chuyển đổi ngày dưới dạng thập phân thành ngày thành tên

tôi có một Array với một ngày nào đó khi giá trị thập phân

class_index=[2,6,7] 

và tôi muốn để lặp qua chuyện này mảng để tạo và mảng tên ngày như thế này

[nil, "Tuesday", nil, nil, nil, "Saturday", "Sunday"] 

vì vậy tôi có thể làm

class_list=[] 
class_index.each do |x| 
    class_list[x-1] = convert x value to day name 
end 

Điều đó có thể thực hiện được không?

+2

Thứ Hai 1, Chủ Nhật 6? Bạn có thể muốn kiểm tra lại rằng ;-) – rdvdijk

+0

Rất tiếc, hehehe hài hước rằng –

Trả lời

6

Làm thế nào về:

require "date" 
DateTime.parse("Wednesday").wday # => 3 

Ồ, tôi bây giờ nhìn thấy bạn đã mở rộng câu hỏi của bạn. Làm thế nào về:

[2,6,7].inject(Array.new(7)) { |memo,obj| memo[obj-1] = Date::DAYNAMES[obj%7]; memo } 

Hãy để tôi giải thích rằng một:

input = [2,6,7] 
empty_array = Array.new(7) # => [nil, nil, nil, nil, nil, nil, nil] 
input.inject(empty_array) do |memo, obj| # loop through the input, and 
             # use the empty array as a 'memo' 
    day_name = Date::DAYNAMES[obj%7]  # get the day's name, modulo 7 (Sunday = 0) 
    memo[obj-1] = day_name     # save the day name in the empty array 
    memo         # return the memo for the next iteration 
end 

Vẻ đẹp của Ruby.

+0

Học Ruby là một hành trình dài .... :) –

+0

Chà, tôi sẽ không bao giờ đoán bạn có thể chỉ cần chuyển tên ngày như thế. +1 –

+0

Ruby thực sự là ma thuật :) –

4

Để đi từ thập phân sang các ngày trong tuần:

require 'date' 
Date::DAYNAMES[1] 
# => "Monday" 

Vì vậy, trong ví dụ của bạn, bạn có thể chỉ cần làm:

class_list=[] 
class_index.each do |x| 
    class_list[x-1] = Date::DAYNAMES[x-1] 
end 
+0

Hehe, đẹp quá. +1 –

1

Dưới đây là một cách mà nói đến cái tâm:

require "date" 

def weekday_index_to_name(index) 
    date = Date.parse("2011-09-26") # Canonical Monday. 
    (index - 1).times { date = date.succ } 
    date.strftime("%A") 
end 
0
class_index=[2,6,7] 

class_index.map{|day_num| Date::DAYNAMES[day_num%7]} 

#=> ["Tuesday", "Saturday", "Sunday"] 

lưu ý rằng tên ngày là từ 0 đến 6, vì vậy bạn có thể làm việc từ 0 đến 6 hoặc có modulo 7

Các vấn đề liên quan