Статьи

Отсутствие Javascript в strftime

Вы знаете этот кусок дерьмового кода, который всегда заставляет вас съеживаться? Что-то вроде месяцев = [‘Jan’, ‘Feb’ ….]; dateString = date.day () + » + months [date.month ()];

Сирена воздушного налета в Ницце, Франция, все еще работает ...

Изображение через Википедию

Да, этот  кусок кода. Давай поговорим об этом .

Это отстой. Существует особый круг ада для людей, которые делают это, и все же разработчики JavaScript вынуждены делать это все время!

В JavaScript это единственный способ сделать это. Я не обосрался тебе.

Пару дней назад я поймал себя на том, что пишу такой код, и у меня в голове зазвенели красные флаги, сигнализация и воздушные налеты. Я чувствовал себя так, будто тот убийца из пословиц, читающий мой код, который знает, где я живу, уже дышал мне в шею.

Страшная ситуация такая.

Но когда я искал элегантный способ заставить свидание и время в  строку , я обнаружил, что в целом ситуация довольно отсутствует. Оказывается, в JavaScript нет встроенной функции strftime, хотя он удивительно блестящий в преобразовании строк в собственные представления.

Строка -> Дата

Есть строка? Хотите свидание? У тебя есть спина, братан!

// all of this correctly returns a millisecond timestamp since unix epoch
// the string argument can also be passed to the date constructor by the way (returns a correct Date object)
Date.parse("Aug 9, 1995")
Date.parse("Wed, 09 Aug 1995 00:00:00 GMT")
Date.parse("Wed, 09 Aug 1995 00:00:00")
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT")
Date.parse("Thu, 01 Jan 1970 00:00:00")
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT-0400")

Дата -> Строка

Есть дата и хотите строку? Ты дерьмо из удачи сын.

Практически единственная конвертация даты в строку, которую изначально поддерживает javascript, — это возвращение строки локали, которая является нестандартной и сильно варьируется от компьютера к компьютеру, и форм стандартизированного времени ISO . Это может сделать это и только это многими способами даже!

> var d = new Date()
> d
Mon, 12 Dec 2011 11:28:55 GMT
> d.toString()
'Mon Dec 12 2011 12:28:55 GMT+0100 (CET)'
> d.toDateString()
'Mon Dec 12 2011'
> d.toISOString()
'2011-12-12T11:28:55.401Z'
> d.toJSON()
'2011-12-12T11:28:55.401Z'
> d.toGMTString()
'Mon, 12 Dec 2011 11:28:55 GMT'
> d.toLocaleDateString()
'Monday, December 12, 2011'
> d.toLocaleString()
'Mon Dec 12 2011 12:28:55 GMT+0100 (CET)'
> d.toLocaleTimeString()
'12:28:55'
> d.toString()
'Mon Dec 12 2011 12:28:55 GMT+0100 (CET)'
> d.toTimeString()
'12:28:55 GMT+0100 (CET)'
> d.toUTCString()
'Mon, 12 Dec 2011 11:28:55 GMT'

Обратите внимание, что ни одна из этих функций не принимает параметр формата? Конечно, вы можете получить эти строки и разбить их на части, чтобы создать строку, отформатированную по вашему вкусу … но я не уверен, что это идеальный подход.

И давайте даже не будем пытаться навязать 12-часовой формат времени из этой вещи. Возможно, если ваш компьютер находится в США, localeString вернет это?

Однако мне удалось найти плагин jquery, который реализует грубую функцию strftime , хотя, кажется, он не работал активно в течение последних трех лет, и многие вещи отсутствуют.

Какая?

Так что у вас есть это. Эпический JavaScript и все же ужасно плохая поддержка преобразования даты-> строки.

Что вы думаете об экосистеме javascript, которая это терпит? Из-за этого, должно быть, бесчисленные разработчики внедряли дерьмовый код, и никто не думал жаловаться? Никто не зашел так далеко, чтобы предложить добавить в язык простую функцию strftime? Большинство популярных языков, кажется, имеют это в своей стандартной библиотеке …

 

С http://swizec.com/blog/javascripts-lack-of-strftime/swizec/3164