2014-11-20 2 views
1

У меня возникла проблема с получением месяца между двумя датами. Вот пример:VBScript DateDiff month

DateDiff("m","2014-10-17","2014-10-30") 

Приведенный выше код возвращает 0 месяцев, так как он меньше, чем через месяц. Но,

DateDiff("m","2014-10-17","2014-11-01") 

возвращает 1, которого не должно быть, так как он еще 15 дней.

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

ответ

2

DateDiff рассчитывает интервал между двумя временными метками с точностью, определенной в первом параметре. Из того, что вы описали в своем вопросе и комментариях, скорее всего, вы ищете что-то вроде этого:

ds1 = "2014-10-17" 
ds2 = "2014-10-30" 

d1 = CDate(ds1) 
d2 = CDate(ds2) 

diff = DateDiff("m", d1, d2) 
If diff > 0 And Day(d2) < Day(d1) Then diff = diff - 1 

WScript.Echo diff & " full months have passed between " & ds1 & " and " & ds2 & "." 
0

Вы можете рассчитать разницу в день между двумя датами, используя 'DateDiff ("d", date1, date2)'. Затем вычислите количество полных месяцев, разделив 30 дней.

Ниже приведен пример.

monthDiff = int(DateDiff("d","2014-10-17","2014-11-01")/30) 

Как вы знаете, дни месяцев различаются по месяцам. Например, ноябрь имеет 30 дней, а декабрь - 31 день.

Если вы хотите использовать 30 дней в месяце, когда первый день - в ноябре, а для использования 31 день в месяц, первый день - декабрь, для этого кода требуется таблица дней месяцев и рутина для обработки информации месяца.

+0

Это именно то, чего я хотел избежать. Предполагается, что эти встроенные функции упрощают работу, но, похоже, они не идеальны. И тогда есть проблема с високосными годами. Надеюсь, кто-то может дать исходный код для этого. – kenjohnny09

+0

'DateDiff' не имеет вашей функции IDEAL. Есть два способа решить вашу проблему: 1) попросите разработчиков VBScript улучшить «DataDiff», как вы хотите, 2) найти способ обхода ограниченной функции «DataDiff». StackOverflow не является разработчиком VBScript, поэтому вы не должны запрашивать решение 1) пути. Удачи! –

+0

@ kenjohnny09 Если вы не хотели, чтобы это было ответом, было бы неплохо упомянуть об этом. Вы должны объединить оба. Если разница в месяце равна единице, то проверьте дни, чтобы быть уверенными. В вашем примере 11-10 равно тому, который, скорее всего, является ядром ответа. В качестве дополнительной проверки вы можете сравнить дни в месяце, чтобы получить точную математику. – Matt

Смежные вопросы