Добавление случайного времени к значению DateTime

Я хотел бы добавить к дате случайное время от 1 до 30 минут, но ColdFusion, похоже, это не нравится. Он добавляет одинаковое количество минут к значению Now() независимо от того, сколько раз я запускаю следующий код. Я не могу понять, почему.

<cfset DateFuture = DateTimeFormat(DateAdd('n', RandRange(1, 30), Now()), 'yyyy-mm-dd HH:mm:ss.l')/>  
<cfoutput>#DateFuture#</cfoutput>

Мне нужен yyyy-mm-dd HH:mm:ss.l DateTimeFormat, потому что так выглядят мои значения даты и времени в SQL Server, где я планирую вставить свою будущую дату.

Если я запускаю приведенный выше код, я продолжаю получать этот вывод:

2017-11-25 22:11:24, а затем внезапно изменится на 2017-11-25 21:11:16, что отнимает целый час, когда я только хочу добавить время!

Непонятно, почему он так себя ведет. Я нахожусь в Великобритании, но использую международный формат даты в формате SQL Server по умолчанию, как указано выше.

ОБНОВЛЕНИЕ: это опечатка! DateTimeFormat должен быть yyyy-mm-dd HH:nn:ss.l. «nn» — это минуты, а не «мм». О!


person volume one    schedule 25.11.2017    source источник
comment
У меня возникло бы искушение использовать дату и время SQL Server. SQL 2016 имеет гораздо более надежный набор функций. Существуют udf, которые заставляют SQL 2014 делать все, что угодно.   -  person James A Mohler    schedule 26.11.2017
comment
Возможно, но наверняка функции ColdFusion должны работать так, как рекламируется?   -  person volume one    schedule 26.11.2017
comment
Это глупая опечатка. Я использовал HH:mm:ss вместо HH:nn:ss   -  person volume one    schedule 26.11.2017
comment
Я знаю, что это не блог, но если учесть, что SQL Server имеет все эти функции даты: docs.microsoft.com/en-us/sql/t-sql/functions/ . Многие из них просто не имеют эквивалентов ColdFusion. Опять же, опечатка всегда все испортит.   -  person James A Mohler    schedule 26.11.2017
comment
Мне нужно гггг-мм-дд ЧЧ:мм:сс.l DateTimeFormat Нет, не нужно. Вставьте значения как объекты даты, а не строки, и это не будет проблемой.   -  person SOS    schedule 26.11.2017
comment
Вы должны убрать свой ответ из вопроса и создать ответ, чтобы принять его.   -  person Twillen    schedule 26.11.2017
comment
А еще лучше отметьте его как дубликат. Часы против месяцев — распространенная ошибка в маске даты. stackoverflow.com/questions/43737301/   -  person SOS    schedule 26.11.2017
comment
Я согласен с volume one, что функции CF должны работать, но я все же согласен с предложением James использовать функции даты SQL, особенно если они в конечном итоге будут вставлены обратно в базу данных. Кроме того, маскировка даты в любом случае становится странной. Если вы работаете с датами, я НАСТОЯТЕЛЬНО рекомендую держать под рукой список ваших маскировок. mm и nn разочаровывают, но, повторюсь, YYYY и yyyy сведут вас с ума.   -  person Shawn    schedule 27.11.2017
comment
@Ageax Его нужно вставить в виде строки, если я хочу полную дату и время. использование cf_sql_date просто вводит дату, а cf_sql_timestamp не включает миллисекунды.   -  person volume one    schedule 01.12.2017
comment
cf_sql_timestamp не включает миллисекунды @volumeone — Да, включает. Какая база данных?   -  person SOS    schedule 01.12.2017
comment
@Ageax SQL-сервер   -  person volume one    schedule 09.01.2018
comment
@volumeone — какой тип данных? Отлично работает с датой и временем (2018-01-09 15:13:02.463, 2018-01-09 15:13:03.617). Хотя в старых версиях миллисекунды округлялись до 1/300.   -  person SOS    schedule 10.01.2018


Ответы (2)


Если вы используете минуты, диапазон от 1 до 30 не даст вам много значений.

Вы сделаете его несколько более случайным, используя seconds [от 600 до 1800] или miliseconds [от 600000 до 1800000].

<cfset miliSeconds = RandRange(600000, 1800000) />
<cfdump var="#miliSeconds#" />

<cfset DateFuture = DateTimeFormat( DateAdd('l', miliSeconds, now()),  'yyyy-mm-dd HH:nn:ss.l')/>  
<cfdump var="#DateFuture#" />


Код запуска: https://trycf.com/gist/f26ff8edbe1736e453ded06d5adf5076/lucee5?theme=monokai

person Alex Baban    schedule 25.11.2017
comment
Вся проблема сводилась к опечатке. Это должно быть ЧЧ: nn: ss. Обратите внимание на «nn», а не на «mm» для обозначения минут. - person volume one; 26.11.2017

Вся проблема сводилась к опечатке. Должно быть HH:nn:ss. Обратите внимание на nn, а не на mm для минут.

person volume one    schedule 01.12.2017