Разница в дате JavaScript - PullRequest
       2

Разница в дате JavaScript

8 голосов
/ 14 декабря 2010

Я смотрел на: Получить разницу между двумя датами в JavaScript?

И я до сих пор не могу заставить это работать.

var difference = data.List[0].EndDate - Math.round(new Date().getTime()/1000.0) * 1000;
var daysRemaining = Math.floor(difference / 1000 / 60 / 60 / 24);
var hoursRemaining = Math.floor(difference / 1000 / 60 / 60 - (24 * daysRemaining));
var minutesRemaining = Math.floor(difference / 1000 / 60 - (24 * 60 * daysRemaining) - (60 * hoursRemaining));
var secondsRemaining = Math.floor(difference / 1000 - (24 * 60 * 60 * daysRemaining) - (60 * 60 * hoursRemaining) - (60 * minutesRemaining));

data.List [0] .EndDate - это номер UTC (например, 1291427809310 (http://www.epochconverter.com/)), который всегда будет позже текущей даты.

Ответы [ 4 ]

11 голосов
/ 16 апреля 2012
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)

}

http://www.mcfedries.com/javascript/daysbetween.asp

6 голосов
/ 25 ноября 2013

Теперь я считаю, это является лучшим решением:

http://momentjs.com/

5 голосов
/ 14 декабря 2010

Вы говорите, что метка времени UTC равна «2004-09-16T23: 59: 58.75»?

Итак, вы в основном делаете

var x = "2004-09-16T23:59:58.75" - 123456

Теперь, когда вы пояснили, что вышеупомянутое не относится. Ваша новая проблема - это количество миллисекунд в прошлом, поэтому при расчете разницы вы получаете отрицательное число. Вы, вероятно, хотите поменять порядок.

var difference = new Date().getTime()-data.List[0].EndDate;
3 голосов
/ 14 декабря 2010

Если EndDate выражен в миллисекундах, а getTime () возвращает миллисекунды, почему вы делите его на 1000 только для умножения на 1000 в той же строке? И если вам нужна только вторая точность для всего остального кода, зачем работать в миллисекундах? Начните с количества секунд, чтобы упростить все ваши вычисления:

var difference = Math.round((data.List[0].EndDate - new Date().getTime()) / 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...