Javascript рассчитать разницу между двумя датами гг-мм-дд - PullRequest
0 голосов
/ 06 октября 2011

Я прочитал довольно много статей и вопросов по вычислению различий дат в javascript, но я не могу найти их для нужного мне формата.

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

Формат даты: 2010-10-05

Я пробовал это, но все, что я получаю, это NaN:

var diff =  Math.floor(( Date.parse(end_date) - Date.parse(start_date) ) / 86400000);

Ответы [ 5 ]

4 голосов
/ 06 октября 2011

Правильно ли я понимаю, что вам на самом деле не нужно знать, сколько дней разнесены эти два дня, вам просто нужно знать, совпадают ли они с датой или с одним днем ​​позже? В этом случае регулярное сравнение строк может сказать вам это, если вы постоянно используете формат «гггг-мм-дд», с двузначными месяцами и двузначными днями; например, «2010-10-05» <«2010-10-16». </p>

2 голосов
/ 06 октября 2011

Прекрасно работает в Firefox:

JSFiddle

var diff,
  aDay = 86400000,
  start_date = "2010-10-05",
  end_date = "2010-10-15";

diff = Math.floor(
  (
    Date.parse(end_date) - Date.parse(start_date)
  ) / aDay);

console.log(diff)

//but perhaps this is safer:

diff = Math.floor(
  (
    Date.parse(
      end_date.replace(/-/g, '\/')
    ) - Date.parse(
      start_date.replace(/-/g, '\/')
    )
  ) / aDay);
console.log(diff)
0 голосов
/ 06 октября 2011

Просто упростите, вырежьте первые 10 символов, замените '-' на '', а затем возьмите конечную дату начала.

Это ужасный способ сделать это, но он настолько прост, что работает в любомязык;)

0 голосов
/ 06 октября 2011

Я надеюсь, что это поможет вам

    t1="2010-12-20";  //date1
    t2="2010-12-30";  //date2

    var one_day=1000*60*60*24; 

    var x=t1.split("-");     
    var y=t2.split("-");

    var date1=new Date(x[0],(x[1]-1),x[2]);
    var date2=new Date(y[0],(y[1]-1),y[2]);

    var month1=x[1]-1;
    var month2=y[1]-1;

    _Diff=Math.ceil((date2.getTime()-date1.getTime())/(one_day));

alert(_Diff);
0 голосов
/ 06 октября 2011

Сначала нужно разобрать дату.Однако встроенный Date.parse может не распознать его.Начните со следующего:

var dateStr = "2010-10-05";
var regex = /(\d{4})-(\d{2})-(\d{2})/.exec(dateStr);
var date = new Date(regex[1], regex[2] - 1, regex[3]);  //Tue Oct 05 2010 00:00:00 GMT+0200 (CEST)

Имея два экземпляра Date объектов, вы можете сравнить их в любом случае.Однако ваше состояние проверяет, находятся ли две даты в течение 24 часов, я думаю, это не то, что вам нужно, поскольку у ваших дат нет отметок времени ...

...