2010-01-07 3 views
115

Итак, у меня есть две даты: YYYY-MM-DD и ZZZZ-NN-EEСколько секунд между двумя датами?

Как узнать, сколько секунд между ними?

+133

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

+0

'yyyy-MM-dd' понятен (год, месяц, день -номер, что они не все в верхнем регистре), но ZZZZ-NN-EE не так. Я интерпретирую это как (часовой пояс, ???, день недели). Это неделя в год? Если это так, это было бы «ww». Но все же нам нужен год, чтобы рассчитать разницу. Не могли бы вы дать некоторые из фактических значений выборки? – BalusC

+0

haha ​​@ комментарий Дон Брэнсона. –

ответ

170

Я принимаю YYYY & ZZZZ означает целые значения, которые означают год, ММ & NN означает целые значения, означающие месяц года и DD & EE как целые значения, означающих в день месяц.

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0); 
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0); 
var dif = t1.getTime() - t2.getTime(); 

var Seconds_from_T1_to_T2 = dif/1000; 
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2); 

Удобный источник для дальнейшего использования является MDN site

В качестве альтернативы, если ваши даты приходят в формате Javascript можно разобрать

var dif = Date.parse(MM + " " + DD + ", " YYYY) - Date.parse(NN + " " + EE + ", " +ZZZZ); 

, а затем вы можете использовать это значение как разница в миллисекунды (в обоих моих примерах одинаковое значение)

+1

Только шаблоны, используемые в примере, не так. 4-значные годы отмечены нижним регистром 'yyyy', 2-значными месяцами по прописным буквам' ММ' и 2-значным дням нижним регистром 'dd'. – BalusC

+1

Я использовал точный формат в вопросе для ясности – Martin

+1

Martin, У меня сложилось впечатление, что здесь не использовались шаблоны дат. MM DD, YYYY и NN EE, ZZZZ на самом деле являются «примерными значениями», которые попросил Стивен. Другими словами, он не делает никакого вида для форматирования. –

5

создать два объекта Date и позвонить по номеру valueOf() по обоим, а затем сравнить их.

JavaScript Date Object Reference

+2

getSeconds() -> Возвращает секунды. (Диапазон 0-59).Должен быть valueOf() или getTime() – steven

59

Просто вычесть:

var a = new Date(); 
alert("Wait a few seconds, then click OK"); 

var b = new Date(); 
var difference = (b - a)/1000; 

alert("You waited: " + difference + " seconds"); 
+0

@ user3344977 - тогда происходит что-то смешное! Проверьте значения 'a' и' b' и убедитесь, что они даты. – Seth

+0

@ Сет, вы правы, поэтому я удалил свой комментарий. Одна из моих «дат» на самом деле была строкой. Это прекрасно работает. – user3344977

4
var a = new Date("2010 jan 10"), 
    b = new Date("2010 jan 9"); 

alert(
    a + "\n" + 
    b + "\n" + 
    "Difference: " + ((+a - +b)/1000) 
); 
13

Если один или оба ваши даты в будущем, то я боюсь, что ты SOL, если вы хотите посекундной точностью. Время UTC имеет секунды прыжка, которые неизвестны примерно за 6 месяцев до их появления, поэтому любые даты, более короткие, чем это может быть неточным на некоторое количество секунд (и на практике, поскольку люди не обновляют свои машины, которые часто, вы может обнаружить, что любое время в будущем отключается на некоторое количество секунд).

Это дает хорошее объяснение теории проектирования библиотек даты/времени, и почему это так: http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs

+7

+1 для упоминания второго прыжка! Это так расстраивает, когда это становится неправильным, даже людьми, которые должны знать лучше (комитет POSIX, я смотрю на вас ...) –

+0

+1 Я не знал об этом. Благодаря! – victmo

+1

Стоит упомянуть, что стандарт ECMA явно игнорирует секунды прыжка (т. Е. Даже * прошлые * прыжки секунд): [В значениях времени значения прыжки секунд игнорируются. Предполагается, что в день имеется ровно 86 400 000 миллисекунд] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1). –

-8

.Net предоставляет класс TimeSpan, чтобы сделать математику для вас.

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0) 
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0) 

Dim ts As TimeSpan = time2.Subtract(time1) 

ts.TotalSeconds 
+0

Это JavaScript? – Dropout

+0

@Jeff, вы можете удалить этот ответ, чтобы не потерять очки. Они попросили исходный код JavaScript, а не исходный код Visual Basic. – MacGyver

-3

В Баше:

bc <<< "$(date --date='1 week ago' +%s) - \ 
    $(date --date='Sun, 29 Feb 2004 16:21:42 -0800' +%s)" 

Это требует, имеющих бв и ГНУ дату установлена.

+1

Как это релевантно? – Dropout

1

Вы можете сделать это просто.

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime())/1000); 
Смежные вопросы