Ruby strftime: день без нуля,% e не работает - PullRequest
10 голосов
/ 23 марта 2011

Я пытаюсь отформатировать дату с днем ​​без начального нуля

с% d работает нормально, но с нулем в начале

date_time.strftime("%d/%m/%y")
result: 04/01/11 

Я гуглил и обнаружил, что должен использовать% e вместо% d, но при выполнении следующего действия я получаю пустую строку.

date_time.strftime("%e/%m/%y")
result: 

Это имеет какое-либо отношение к версии Ruby? Я использую v1.8.7 на машине Windows. И что более важно, есть ли другой способ сделать день без нуля (более удобный, чем gsub)?

Ответы [ 5 ]

25 голосов
/ 12 августа 2014

Если вы хотите сбросить ведущий ноль для месяца или дня, просто добавьте знак минус перед форматом, например:

Date.parse("2014/06/06").strftime("%Y/%-d/%-m")
9 голосов
/ 23 марта 2011

Как вариант:

date_time.strftime("#{date_time.day}/%m/%y")
3 голосов
/ 23 марта 2011

У меня были проблемы с тем, что strftime в Windows не поддерживает те же коды, что и в unix.

Кроме того, я выполнил следующее на Mac OS X:

> date_time.strftime("%e/%m/%y")
" 3/03/11" 

КакВы можете видеть, есть место, где был ноль.Вам все еще нужно обработать строку после вызова strftime.

Я бы сказал, сделайте самую безопасную ставку, в этом случае% d, и вызовите gsub / trim для нее.

1 голос
/ 07 декабря 2012

К сожалению, %e все еще оставляет пробел вместо 0. Если вам не нужен пробел, я бы просто удалил ведущий 0, как это.

> date_time.strftime("%d/%m/%y").gsub(/^0/, '')
"7/12/12"
1 голос
/ 23 марта 2011

попробуйте

date_time.strftime("%d/%m/%y").gsub(/ 0(\d\D)/, ' \1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...