Вы можете создать объект JavaScript Date
, передав значения year, month, day
. Обратите внимание, что вам нужно -1
из месяца, потому что месяцы, как и большинство вещей в JavaScript, начинаются с 0
. (January = 0, December = 11
)
Когда у вас есть дата, вы можете использовать Date.toLocaleString()
, что позволяет вам передавать объект options
с вашими предпочтениями форматирования.
$("#btnGetDate").on("click", function() {
//Get values from the inputs
var year = $("#txtYear").val();
var month = $("#ddlMonth").val();
var day = $("#txtDay").val();
//Format the date and output it
var formattedDate = formatDate(year, month, day);
console.log(`Your date is ${formattedDate}`);
});
function formatDate(year, month, day) {
//Create a Date object using the values
var date = new Date(year, month - 1, day);
//Define how you want the date to be formatted
var options = {
weekday: "long",
year: "numeric",
month: "long",
day: "numeric"
};
//Format the date according to our options
return date.toLocaleDateString("en-US", options);
}
input,select {margin-right: 10px;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Month
<select id="ddlMonth">
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<!-- and so on... -->
</select>
Day
<input id="txtDay" type="number" placeholder="dd">
Year
<input id="txtYear" type="number" placeholder="yyyy">
<button id="btnGetDate">Output Date</button>
Конечно, это может использовать некоторые ограждения / проверки правильности ввода неправильных дат, ввода дня или года в неправильном формате и т. д., но я оставлю эту часть на ваше усмотрение!
Да, необходимо выполнить в этом Ваш инициализировать и методы загрузки при инициализации globals, который должен только быть инициализирован однажды.
Тем не менее существует много случаев, где можно избежать его...
Вы не должны переноситься с этим условным выражением, если работа должна быть выполнена на каждом inheritant каждого класса:
Существуют также ситуации, где Вы просто не должны беспокоиться:
"Идемпотентная" часть релевантна. Инициализатор должен просто устанавливать начальное состояние (который должен быть тем же каждым разом). В хорошем инициализаторе не должно иметь значения повторение. Хотя я предполагаю, что, если Вы забываете переносить метод в условное выражение, когда это действительно имеет значение, это могло бы быть раздражающим.
отредактированное дополнение: другой подход, который правильно отражает любые initialize-only-once требования, должен был бы протестировать, если Ваши свойства для инициализации уже инициализируются. т.е.
id myGlobalObject = nil;
+(void)initialize
{
if (myGlobalObject == nil)
{
myGlobalObject = [[MyGlobalClass alloc] init];
}
}
Быстрый ответ: Нет.
Всестороннее обсуждение этого вопроса может быть найдено в списке рассылки разработчика Apple.
Суть его то, что:
+initialize
на суперклассах, прежде чем это назовут на подклассах. +initialize
метод не инициирует зависимые уведомления KVO. Для примера точки № 2, убедиться прочитать это сообщение в упомянутом выше потоке.