Javascript Получить текущую дату и разницу даты в дни с существующей датой [дублировать]

5
задан joe 11 September 2009 в 13:53
поделиться

10 ответов


<script language="JavaScript">
<!--
function dstrToUTC(ds) {
 var dsarr = ds.split("/");
 var mm = parseInt(dsarr[0],10);
 var dd = parseInt(dsarr[1],10);
 var yy = parseInt(dsarr[2],10);
 return Date.UTC(yy,mm-1,dd,0,0,0);
}

function datediff(ds1,ds2) {
 var d1 = dstrToUTC(ds1);
 var d2 = dstrToUTC(ds2);
 var oneday = 86400000;
 return (d2-d1) / oneday;
}

// test cases are below

var a; var b;

a = "01/09/1999";
b = "01/10/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "01/12/1999";
b = "01/19/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "01/19/1999";
b = "01/12/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "01/03/1999";
b = "01/13/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "04/30/1999";
b = "05/01/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "05/30/1999";
b = "06/01/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "02/28/1999";
b = "03/01/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "02/28/2000";
b = "03/01/2000";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "01/01/1999";
b = "12/31/1999";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "01/01/2000";
b = "12/31/2000";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

a = "12/15/1999";
b = "01/15/2001";
document.write("From "+a+" to "+b+" is "+datediff(a,b)+" day(s)<br>");

// -->
</script>
17
ответ дан Robert L 17 August 2018 в 13:22
поделиться
diff.setTime(Math.abs(date1.getTime() - date2.getTime()));

timediff = diff.getTime();

weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
timediff -= days * (1000 * 60 * 60 * 24);

hours = Math.floor(timediff / (1000 * 60 * 60)); 
timediff -= hours * (1000 * 60 * 60);

mins = Math.floor(timediff / (1000 * 60)); 
timediff -= mins * (1000 * 60);

secs = Math.floor(timediff / 1000); 
timediff -= secs * 1000;

alert(weeks + " weeks, " + days + " days, " + hours + " hours, " + mins + " minutes, and " + secs + " seconds");
1
ответ дан bogdanbrudiu 17 August 2018 в 13:22
поделиться
  • 1
    Разве вам не кажется лишним, что вы устанавливаете разницу во времени для другого объекта даты? date1.getTime () - date2.getTime () возвратит разницу в миллисекундах в любом случае. – Andy E 17 September 2009 в 09:30

Здесь объясняется, как найти разницу между двумя датами в javascript

0
ответ дан dmateev 17 August 2018 в 13:22
поделиться

Попробуйте

var diff2 =    Date.parse("03/12/2009") - Date.parse("02/09/2009");

Это даст вам разницу между датами в миллисекундах. Разделите это число на 86 400 000, и разница будет в днях.

0
ответ дан Elias Zamaria 17 August 2018 в 13:22
поделиться

использовать Date.parse (date1) - Date.parse (date2)

1
ответ дан Khodor 17 August 2018 в 13:22
поделиться

да. Вы должны использовать объект Date, например

var d = new Date(2009,9,19); //19th october, months are 0-based
var d2 = new Date(2009,10,12);
var diff = (d2 - d)/60000;  //diff in minutes
alert(diff / 24);   //difference in hours
0
ответ дан Pier Luigi 17 August 2018 в 13:22
поделиться
<script type="text/javascript">
function GetD()
{
    var date1 = new Date ( 2009 , 09 , 02 );
    var date2 = new Date ( 2009 , 12 , 03 );        

    var diff = days_between (date1,date2);
    alert ( diff );
}
function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24;

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms);

    // Convert back to days and return

    return Math.round(difference_ms/ONE_DAY);
}
</script>
-1
ответ дан rahul 17 August 2018 в 13:22
поделиться

date2 = 02/09/2009 не считается датой. он работает таким образом. Сначала он делится 02/09, он возвращает 0.2222222222222222, и его разделили на 2009 год (0.2222222222222222 / 2009). наконец, вы получили результат date2 = 0.0001106133510314695. таким же образом он вычисляет результат для даты1.

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

использовать либо новую дату (), либо Date.parse («02/09/2009»)

Изменить:

   new Date(Date.parse("03/12/2009")-Date.parse("02/09/2009")).toLocaleDateString() Or
   new Date(date1- date2).toLocaleDateString()

is not that work .. ??

Редактировать:

может быть, это сработает .. можно попробовать ..

 Date.parse("03/12/2009")-Date.parse("02/09/2009") / (24*60*60*1000) 

, и он возвращает 31 день

, кажется, работает для меня .. но в моей временной зоне это заняло 03/12/2009 как 3-й месяц 11-й день и год 2009

(24 * 60 * 60 * 1000) = количество миллисекунд в день

4
ответ дан RameshVel 17 August 2018 в 13:22
поделиться
  • 1
    нет, он показывает 01/02/1970, как это .. я просто не хочу разницы в днях – joe 11 September 2009 в 13:50
  1. getDate () возвращает день месяца, в вашем случае: 9 и 12.
  2. Вы должны явно определять объекты даты через следующее. Месяцы основаны на 0, поэтому 0 = январь, 1 = февраль ... var date2 = new Date (2009, 1, 9);
  3. Это числа, а не строка. Если вы хотите использовать строку для даты, то вам нужен именно этот формат, ничего необязательного: var newDate = new Date («день месяца, год: минуты: секунды»); var date2 = new Date («февраль 9, 2009 00:00:00»);

[Изменить] Полное решение, если даты указаны в формате mm / dd / yyyy, а разница должно быть в днях:

<script type="text/javascript">
    function daysFromString(dateString)
    {
        // split strings at / and return array
        var splittedString = dateString.split("/");
        // make a new date. Caveat: Months are 0-based in JS
        var newDate = new Date(parseInt(splittedString[2], 10), parseInt(splittedString[0], 10)-1, parseInt(splittedString[1], 10));
        // returns days since jan 1 1970
        return Math.round(newDate.getTime() / (24*3600*1000));
    }

    var dateString2 = "02/09/2009";
    var dateString1= "03/12/2009";
    var dateDays1 = daysFromString(dateString1);
    var dateDays2 = daysFromString(dateString2);
    var diff = dateDays1 - dateDays2;
    alert (diff);
</script>
1
ответ дан Residuum 17 August 2018 в 13:22
поделиться
  • 1
    Вам нужно указать base 10 с parseInt. Если вы этого не сделаете, то он неправильно обрабатывает такие вещи, как «08». и "09". – Robert L 17 September 2009 в 19:26
  • 2
    И вы забыли Daylight Saving Time. – Robert L 17 September 2009 в 19:28
  • 3
    @Robert L: Спасибо за оба предложения, я отредактировал свой ответ соответственно. – Residuum 18 September 2009 в 09:25

getDate - метод объекта Date. так как в любом документе четко указано, что он возвращает день месяца в диапазоне от 0 до 31. было бы бессмысленно пытаться вычесть одно из другого, если это не тот же месяц.

2
ответ дан SilentGhost 17 August 2018 в 13:22
поделиться
Другие вопросы по тегам:

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