Module: TimeHelper

Defined in:
lib/helper/time_helper.rb

Instance Method Summary collapse

Instance Method Details

#get_days(date_begin, date_end, week_days) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/helper/time_helper.rb', line 106

def get_days(date_begin, date_end, week_days)
  if week_days.sort == [0,1,2,3,4,5,6]
    days = []
  elsif date_begin == date_end
    days = [date_begin.to_s]
  else
    days = (date_begin..date_end).select do |e|
      week_days.include?(e.wday)
    end
    days.collect{|d| d.to_s}
  end
end

#scan_date(str) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/helper/time_helper.rb', line 119

def scan_date str
  arr = str.scan(/(\d+年)?(\d+)月(\d+)日/)
  arr.first[0] = arr.first[0].nil? ? Date.today.year.to_s : arr.first[0].chop
  date_begin = arr.first.join('-').to_date
  if arr.size > 1
    arr.last[0] = arr.last[0].nil? ? Date.today.year.to_s : arr.last[0].chop
    date_end = arr.last.join('-').to_date
  else
    date_end = date_begin
  end
  date_end = date_end.next_year if date_end < date_begin
  {date_begin: date_begin, date_end: date_end}
end

#scan_time(str) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/helper/time_helper.rb', line 29

def scan_time str
  arr = str.scan(/(\d+:\d+)/).flatten
  if arr.size > 0
    time_begin = arr.first.to_time
    if arr.size > 1
      time_end = arr.last.to_time
    end 
    arr12 = str.scan(/晚上/)
    if arr12.size > 0
      if time_begin.hour <= 12
        time_begin += 12.hour
        time_end += 12.hour if str.scan(/凌晨/).blank? && time_end.hour <= 12
      end
    end
  end
  time_begin ||= '00:00'.to_time
  time_end ||= '00:00'.to_time
  { time_begin: time_begin.strftime("%H:%M"),
    time_end: time_end.strftime("%H:%M"),
    time_begin_seconds: time_begin.seconds_since_midnight,
    time_end_seconds: time_end.seconds_since_midnight}
end

#scan_week_day(str) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/helper/time_helper.rb', line 52

def scan_week_day str
  week_day_hash = {
    "" => 1,
    "" => 2,
    "" => 3,
    "" => 4,
    "" => 5,
    "" => 6,
    "" => 0,
  }
  # "03月15日 ~ 06月07日 每周六、日 10:00-11:30"
  # "04月01日 ~ 06月01日 每周二、三、五、日 08:00-20:30"
  arr = str.scan(/周(.)|、([一|二|三|四|五|六|日]){1,6}/)
  week_days = []
  if arr.size > 0
    week_days = arr.collect do |d|
      week_day_hash.values_at((d - [nil]).first).first
    end
  end
  # 03月31日 ~ 06月17日 每周二至周日 14:00-16:30
  arr = str.scan(/周(.)至周(.)/).flatten
  if arr.size > 0
    days = arr.map{|key| week_day_hash[key]}
    week_days = (days.first..(days-[0]).last).to_a
    week_days << 0 if days.include?(0)
    #if days.last == 0
    #  days[-1] = 6
    #  week_days = (days.first..days.last).to_a
    #  week_days << 0
    #else
    #  week_days = (days.first..days.last).to_a
    #end
  end 
  # 开始时间:1月9日 11:00(周四)结束时间:4月9日 00:00(周三)
  arr = str.scan(/\d+:\d+\(周[一|二|三|四|五|六|日]\)/)
  if arr.size == 2
    week_days = [1,2,3,4,5,6,0]
  end
  # 03月15日 ~ 06月01日 每天08:30-09:00
  arr = str.scan(/每天/)
  if arr.size > 0
    week_days = [1,2,3,4,5,6,0]
  end
  # 2014年4月12日 星期六 15:00 - 18:00
  arr = str.scan(/星期([一|二|三|四|五|六|日])/).flatten
  if arr.size > 0
    week_days = arr.map{|key| week_day_hash[key]}
  end
  
  date_hash = scan_date(str)
  days = get_days(date_hash[:date_begin], date_hash[:date_end], week_days)
  date_hash.merge({days: days, day_weekly: week_days})
end

#time_parse(str) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/helper/time_helper.rb', line 4

def time_parse(str)
  date_hash = {}
  
  # 2014年1月11日 - 2014年4月20日
  # 2014年4月12日 星期六 15:00 - 18:00
  # 12月31日 ~ 2015年01月01日 每天20:00-22:00
  # 03月15日 ~ 06月07日 每周六、日 10:00-11:30
  # 04月01日 ~ 06月01日 每周二、三、五、日 08:00-20:30
  # 03月16日 ~ 06月08日 每周日 09:00-11:00
  # 07月26日 周六 19:30-22:30
  # 03月31日 ~ 06月17日 每周二至周日 14:00-16:30
  # 开始时间:1月9日 11:00(周四)结束时间:4月9日 00:00(周三)
  # 03月15日 ~ 06月01日 每天08:30-09:00
  # 03月19日 周三 19:30-21:00||||06月15日 周日 19:30-21:30 位置不要乱动||||
  #
  #     07月04日 周五 20:00-23:30
  #     07月05日 周六 20:00-23:30
  #     07月13日 周日 20:00-23:30
  #             
  # 7月08日 星期二 , 晚上 09:00 - 7月09日 星期三 , 凌晨 04:00 TODO

  date_hash.merge!(scan_time(str))
  date_hash.merge!(scan_week_day(str))
end