Как я могу получить Bootstrap DateTimePicker для отображения правильного года?

[host_group]
host-1 ansible_ssh_host=192.168.0.21 node_name=foo
host-2 ansible_ssh_host=192.168.0.22 node_name=bar

[host_group:vars]
custom_var=asdasdasd

Вы можете получить доступ к вагам группы хостов, используя:

{{ hostvars['host_group'].custom_var }}

Если вам нужно определенное значение с определенного хоста, вы можете использовать:

{{ hostvars[groups['host_group'][0]].node_name }}
4
задан RRK 27 March 2019 в 05:00
поделиться

2 ответа

Я понял свою проблему. Когда кнопка «Сохранить» нажата, данные помещаются в структуру, которая передается в следующую функцию:

<cffunction name="addEvent" access="public" returntype="any">
<cfargument name="eventStruct" type="struct" required="yes">
<!--- Verify the structure is formated correctly --->

<!--- Checks if all the required elements of the struct are there --->

<!--- Verify the date object is correct --->
<cfif NOT isDate(ARGUMENTS.eventStruct.eventDateTime)>
    <cfset errorCode = "INVALID_VARIABLE_TYPE">
    <cflog file="chapter-reports" type="error" 
        text="#errorCode#: variable must be a coldfusion date object">
    <cfreturn errorCode />
</cfif>
<!--- Format the date --->
<cfset ARGUMENTS.eventStruct.eventDateTime = DateTimeFormat(ARGUMENTS.eventStruct.eventDateTime,"yyyy-MM-dd HH:nn:ss")>
<!--- Insert the event into the table --->
<cftry>
    <cfquery datasource="#VARIABLES.datasource#" name="insertEvent" result="newEvent">
        INSERT INTO #VARIABLES.tablePrefix#events
        (/*column names*/,event_date_time,/*more column names*/)
        VALUES(
            /*data*/,
            '#ARGUMENTS.eventStruct.eventDateTime#',
            /*more data*/
        )
    </cfquery>

    <!--- Send an error message if there is a database error --->

</cftry>
<cfreturn newEvent.generated_key />

Первоначально она будет форматировать дату с помощью «ГГГГ» , но после изменения его на «гггг», он работает как задумано.

0
ответ дан SlowCuber17 27 March 2019 в 05:00
поделиться

Здесь вы говорите о нескольких разных вещах: вы работаете с Javascript в вашем шаблоне Bootstrap, ваших переменных ColdFusion и вашей базе данных. Все 3 могут повлиять на конечную дату, которую вы видите, и то, что вы видите, - это не объект даты (как, в конечном счете, должна хотеть база данных), а строковое представление объекта даты.

Когда вы смотрите на дату, она, вероятно, выглядит как March 27, 2019 12:00:00 pm или 03/27/2019 12:00:00 pm или 27/03/2019 12:00:00.000 или что-то в этом роде. Когда база данных или язык программирования воспринимают эту строку как объект даты, она выглядит как 123465789.123465798, что обычно составляет конкретное значение в секундах с той эпохи, которую использует системный компонент. Epoch это совершенно другая тема.

Поскольку длинная десятичная дробь на самом деле не читается человеком как дата, ваш язык должен выполнять маскирование для преобразования между двумя представлениями.

Вы хотите иметь в виду, какую часть кода вы используете для маскировки. Обычно маскировка предназначена для отображения, но вам также может понадобиться преобразовать строку в объект с возможностью считывания даты в вашей базе данных, прежде чем он вставит ее. Итак, вы захотите убедиться, что ваш Javascript ничего не делает со значением в вашей форме, что ColdFusion ничего не делает с этой строкой Javascript, и что ваша база данных больше не изменяет эту строку ColdFusion.

Я не уверен, что Bootstrap datapicker использует для интерпретации строк даты или, если он в конечном итоге отправляет нечетную строку в ColdFusion, но я точно знаю, что CF11 использует различную маскировку в зависимости от используемой вами функции , DateFormat() не волнует, какой случай вы используете, но DateTimeFormat() делает. Он опирается на определение маскировки своей базовой Java SimpleDateFormat, которая интерпретирует y и Y как разные маски, означающие разные вещи.

Большая боль в том, что, как вы видели, он будет виден только через несколько дней в конце года, поскольку год никогда не состоит из ровно 52 недель. Таким образом, у нас есть другой тип даты, называемый WeekYear или Y в SimpleDateFormat маскировке. По сути, это тот год, в котором он основан на Неделе (W или w). Таким образом, в течение нескольких дней в начале и конце года календарный год не будет равняться году недели. В остальные 358 дней года они будут такими же. А поскольку Новый год и канун Нового года часто являются нерабочими праздниками, ОЧЕНЬ ПРОСТО упускать из виду. Так что, по сути, ваш код не работал правильно последние пару лет; у тебя просто не было причин замечать Забавно, правда?

Для простого примера, см .: https://trycf.com/gist/5cb651559e28e5cbdecdb57b959c3c18/acf11?theme=monokai

И если вы заметили и dateFormat(), и timeFormat() будут маскироваться за пределы того, что они «технически» должны делать. Вы можете получить timeFormat(), чтобы применить маску к части date строки. Они не должны работать таким образом.

Как я уже говорил во многих местах, обработка дат (почти на любом языке) - моя любимая мозоль. Это тема, которая заставит вас захотеть вырвать свои волосы. И, возможно, волосы любого, кто сидит рядом с вами. И ОПРЕДЕЛЕННО волосы того, кто написал код обработки даты, который вы отлаживаете. Это полностью вызывающая ярость Кодекс тема.

1141 В любом случае, если вы захотите взглянуть на некоторые другие примеры, я уже писал об этом пару раз и, вероятно, сделаю это снова. Спасибо, что втянул меня обратно в эту кроличью нору чистого безумия.

https://codefumonkey.blogspot.com/2016/02/date-masking-inconsistency.html https://codefumonkey.blogspot.com/2016/10/ more-date-masking.html

ПРИМЕЧАНИЕ: Более поздние версии CF изменили поведение маскирования в некоторых функциях даты. Они не чувствительны к регистру в CF2018, поэтому не имеет значения, используете ли вы yyyy или YYYY. Но сделайте себе одолжение и используйте yyyy, так как вы знаете, что CF все еще построен на Java. Однако есть некоторые другие фреймворки, которые ожидают YYYY вместо yyyy, поэтому все еще очень важно помнить, какой язык вы используете для применения маски. И если вам не нужно видеть значение даты и вы можете продолжать работать с объектом даты, оставьте его таким, а не делайте его читабельной строкой.

0
ответ дан Shawn 27 March 2019 в 05:00
поделиться
Другие вопросы по тегам:

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