Как я форматирую дату в рубине для включения “ул.” как в “3-м” [дубликат]

В текущей версии Chrome (сентябрь 2017 года) я ограничен примерно 8,3 миллионами ключей. Попробуйте вставить это в консоль вашего браузера:

let obj = {};
let keyCount = 0;
while(1) {
  obj[Math.random()] = Math.random();
  if(++keyCount % 10000 === 0) console.log(keyCount);
}

Я получаю идентичный предел в Node.js:

node --max-old-space-size=20000 -e "let obj = {}; let keyCount = 0; while(1) { obj[Math.random()] = Math.random(); if(++keyCount % 10000 === 0) console.log(keyCount); }"

Интересно, если я использую Map , я могу получить около 16.8 миллионов ключей до того, как он сработает (вы можете преодолеть этот предел с помощью чего-то вроде this ).

23
задан Laurie Young 4 July 2009 в 10:12
поделиться

5 ответов

I ' m собираюсь повторить все, но я просто рекомендую вам загрузить гем activesupport , чтобы вы могли просто использовать его как библиотеку. Вам не нужны все Rails для использования ordinalize .

% gem install activesupport
...
% irb 
irb> require 'rubygems'
#=>  true
irb> require 'activesupport'
#=>  true
irb> 3.ordinalize
#=>  "3rd"
24
ответ дан 29 November 2019 в 00:39
поделиться

Я не знаю, делает ли он это намного (любой?) Быстрее, чем коммутатор, но я сделал константу с окончаниями:

DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"]

Затем просто использовал это как:

DAY_ENDINGS[date.mday]

Как я хотел, чтобы окончание внутри

<span>th</span>
1
ответ дан mpartan 29 November 2019 в 00:39
поделиться

Если вы не используете Rails , добавьте этот метод ordinalize (код без стыда взяты из исходного кода Rails) в класс Fixnum

class Fixnum
  def ordinalize
    if (11..13).include?(self % 100)
      "#{self}th"
    else
      case self % 10
        when 1; "#{self}st"
        when 2; "#{self}nd"
        when 3; "#{self}rd"
        else    "#{self}th"
      end
    end
  end
end

Затем отформатируйте дату следующим образом:

> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009
39
ответ дан 29 November 2019 в 00:39
поделиться

Я не думаю, что он есть в Ruby, но если у вас есть Rails, попробуйте следующее: -

puts 3.ordinalize #=> "3rd"
8
ответ дан 29 November 2019 в 00:39
поделиться
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")

Произведет "4 июля 2009 г."

24
ответ дан 29 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: