Вычтите дату с текущей даты javascript [дубликат]

df.write.save(path='csv', format='csv', mode='append', sep='\t')
100
задан bdukes 3 September 2008 в 16:34
поделиться

16 ответов

В JavaScript даты могут быть преобразованы в число миллисекунд с момента epoc, вызвав метод getTime() или просто используя дату в числовом выражении.

Итак, чтобы получить разницу, просто вычтите две даты.

Чтобы создать новую дату на основе разности, просто передайте количество миллисекунд в конструкторе.

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

Это должно работать только

EDIT: Исправлена ​​ошибка, отмеченная @bdukes

EDIT:

Для объяснения поведения oldBegin, oldEnd и newBegin являются Date экземплярами , Операторы вызова + и - будут запускать автоматическое кастинг Javascript и автоматически вызывают метод прототипа valueOf() для этих объектов. Бывает, что метод valueOf() реализован в объекте Date в качестве вызова getTime().

Итак, в основном: date.getTime() === date.valueOf() === (0 + date) === (+date)

67
ответ дан Vincent Robert 21 August 2018 в 22:23
поделиться
  • 1
    Не совсем ясный ответ. Как применить getTime()? – Gruber 12 September 2012 в 14:59
  • 2
    Вы пробовали date.getTime ()? – Vincent Robert 12 September 2012 в 16:12
  • 3
    Каков формат, необходимый для работы .getTime () ... Например - новая дата ('22 -12-2012 00:00 '). GetTime () не будет работать ... Любые идеи? – Jimmyt1988 18 September 2012 в 17:05
  • 4
    Для синтаксического анализа даты в JS я предлагаю вам взглянуть на этот вопрос: stackoverflow.com/questions/1576753/… – Vincent Robert 19 September 2012 в 13:13
  • 5
    Предполагается, что OldBegin, oldEnd и NewBegin являются объектами Date? Трудно сказать, какой тип объекта они должны быть, так как объявление переменной здесь опущено. – Anderson Green 24 February 2013 в 19:52

Если вы используете объекты Date, а затем используете функцию getTime() для обеих дат, это даст вам соответствующее время с 1 января 1970 года в числовом значении. Затем вы можете получить разницу между этими числами.

Если это вам не поможет, ознакомьтесь с полной документацией: http://www.w3schools.com/jsref/jsref_obj_date.asp

0
ответ дан Alexander Elgin 21 August 2018 в 22:23
поделиться
  • 1
    Я не думаю, что ссылка на w3schools.com слишком хорошая: w3fools.com – Koen. 16 May 2012 в 15:27
  • 2
    О, да, не заметил, ответы ниже этого не более полугода. – Koen. 19 May 2012 в 14:26
  • 3
    Никогда не разбирайте строки даты, чтобы найти год, потому что появление строк (esp. Separators) отличается от браузеров. Используйте getFullYear, который был разработан для этого. ------- См. Datejs library на googlecode, который, возможно, поддерживает большинство угловых случаев – Dan 4 April 2013 в 13:06
  • 4
    спасибо за совет @ Dan, но он работал и тестировался для меня на реальном правительственном проекте (разные браузеры) - это та слабая практика программирования? :) – shareef 4 April 2013 в 14:10
function checkdate() {
    var indate = new Date()
    indate.setDate(dat)
    indate.setMonth(mon - 1)
    indate.setFullYear(year)

    var one_day = 1000 * 60 * 60 * 24
    var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day))
    var str = diff + " days are remaining.."
    document.getElementById('print').innerHTML = str.fontcolor('blue')
}
0
ответ дан bdukes 21 August 2018 в 22:23
поделиться

Спасибо @ Винсент Роберт , я закончил использовать ваш основной пример, хотя на самом деле это newBegin + oldEnd - oldBegin. Вот упрощенное конечное решение:

    // don't update end date if there's already an end date but not an old start date
    if (!oldEnd || oldBegin) {
        var selectedDateSpan = 1800000; // 30 minutes
        if (oldEnd) {
            selectedDateSpan = oldEnd - oldBegin;
        }

       newEnd = new Date(newBegin.getTime() + selectedDateSpan));
    }
3
ответ дан Community 21 August 2018 в 22:23
поделиться
  • 1
    Это хороший момент, чтобы объяснить, почему вы иногда используете getTime, а иногда и не – Dan 4 April 2013 в 13:22

JavaScript отлично поддерживает разницу дат из коробки

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between');

Теперь некоторые подводные камни. Попробуйте это:

console.log(a - 10);
console.log(a + 10);

Итак, если у вас есть риск добавить число и дату, немедленно конвертируйте Date в number.

console.log(a.getTime() - 10);
console.log(a.getTime() + 10);

Мой кулачный пример демонстрирует силу Date, но на самом деле он кажется бомбой замедленного действия

20
ответ дан Dan 21 August 2018 в 22:23
поделиться
  • 1
    Дэн, я нашел ваш пример проще всего понять и следовать. Благодарю. – Melanie 30 July 2014 в 19:52
  • 2
    "Ловушки" фактически являются значениями по умолчанию на основе спецификации языка. Оператор вычитания - принуждает аргументы к числу, поэтому Date возвращает свое значение времени. Оператор + перегружен, что может привести к добавлению, принуждению к количеству или конкатенации. Так как Dates принуждают к String в этом случае, + делает конкатенацию. Путаница - это не ошибка объекта Date, а перегрузка операторов. – RobG 23 March 2016 в 00:53

Ниже код вернет дни, оставшиеся от сегодняшнего дня до даты фьючерса.

Зависимости: jQuery и MomentJs.

var getDaysLeft = function (date) {
  var today = new Date();
  var daysLeftInMilliSec = Math.abs(new Date(moment(today).format('YYYY-MM-DD')) - new Date(date));
  var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24);   
  return daysLeft;
};

getDaysLeft('YYYY-MM-DD');
0
ответ дан Ivan 21 August 2018 в 22:23
поделиться

Если использовать moment.js, есть более простое решение, которое даст вам разницу в днях в одной строке кода.

moment(endDate).diff(moment(beginDate), 'days');

Дополнительные сведения можно найти в moment.js page

Cheers, Miguel

2
ответ дан Miguel Guardo 21 August 2018 в 22:23
поделиться

альтернативный расширенный код модификации ..

http://jsfiddle.net/vvGPQ/48/

showDiff();

function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");   
var date2 = new Date();
//Customise date2 for your required future time

var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));

var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;

var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;    

var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;

var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;

var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;




document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed.";

setTimeout(showDiff,1000);
}
0
ответ дан NovaYear 21 August 2018 в 22:23
поделиться
  • 1
    Пожалуйста, добавьте дополнительные пояснения к своему ответу и используйте лучший английский. – Nic Hartley 12 May 2015 в 14:53
  • 2
    Это решение неверно, потому что вы используете 365 дней, игнорируя високосные годы. – Sergey Goliney 3 March 2017 в 20:04
function compare()
{
  var end_actual_time    = $('#date3').val();

  start_actual_time = new Date();
  end_actual_time = new Date(end_actual_time);

  var diff = end_actual_time-start_actual_time;

  var diffSeconds = diff/1000;
  var HH = Math.floor(diffSeconds/3600);
  var MM = Math.floor(diffSeconds%3600)/60;

  var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM)
  getTime(diffSeconds);
}
function getTime(seconds) {
  var days = Math.floor(leftover / 86400);

  //how many seconds are left
  leftover = leftover - (days * 86400);

  //how many full hours fits in the amount of leftover seconds
  var hours = Math.floor(leftover / 3600);

  //how many seconds are left
  leftover = leftover - (hours * 3600);

  //how many minutes fits in the amount of leftover seconds
  var minutes = leftover / 60;

  //how many seconds are left
  //leftover = leftover - (minutes * 60);
  alert(days + ':' + hours + ':' + minutes);
}
1
ответ дан Phil Bozak 21 August 2018 в 22:23
поделиться

ЭТО, ЧТО Я ДЕЛАТЬ НА МОЕЙ СИСТЕМЕ.

var startTime=("08:00:00").split(":");
var endTime=("16:00:00").split(":");
var HoursInMinutes=((parseInt(endTime[0])*60)+parseInt(endTime[1]))-((parseInt(startTime[0])*60)+parseInt(startTime[1]));
console.log(HoursInMinutes/60);
0
ответ дан Sean Cortez 21 August 2018 в 22:23
поделиться

Если вам не нужен компонент времени, вы можете использовать .getDate() и .setDate(), чтобы просто установить дату.

Итак, чтобы установить дату окончания через 2 недели после вашего запуска date, сделайте следующее:

function GetEndDate(startDate)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate()+14);
    return endDate;
}

Чтобы вернуть разность (в днях) между двумя датами, сделайте следующее:

function GetDateDiff(startDate, endDate)
{
    return endDate.getDate() - startDate.getDate();
}

Наконец, давайте модифицируем первую функцию так, чтобы он может принять значение, возвращаемое вторым как параметр:

function GetEndDate(startDate, days)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate() + days);
    return endDate;
}
4
ответ дан Sid M 21 August 2018 в 22:23
поделиться
  • 1
    GetDateDiff() будет перекрывать месячные барьеры. Например, 2011/04/26 и 2011/05/01 вернутся -25, но смещение должно быть 5 дней. – nfm 26 April 2011 в 02:40
  • 2
    var ds = new Дата (2014, 0, 31, 0, 0, 0, 0); var de = new Дата (2014, 2, 31, 0, 0, 0, 0); GetDateDiff (ds, de) return 0 – Noor 22 April 2016 в 10:22

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

// This one returns a signed decimal. The sign indicates past or future.

this.getDateDiff = function(date1, date2) {
    return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
}

// This one always returns a positive decimal. (Suggested by Koen below)

this.getDateDiff = function(date1, date2) {
    return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
}
2
ответ дан Spider 21 August 2018 в 22:23
поделиться
  • 1
    Поместите его в вызов Math.abs(), и вы всегда получите положительное десятичное число. – Koen. 16 May 2012 в 15:26
  • 2
    Хорошее предложение Koen. Это дает людям 2 варианта: только истинный дифференциал даты, как вы предполагали, или датифф со знаком, указывающим, есть ли разница в прошлом или будущем. :) – Spider 18 May 2012 в 11:55
  • 3
    Обратите внимание, что в JavaScript вы также можете добавить / вычитать число в миллисекундах до date.getTime(), чтобы получить время в будущем / прошлом. `var nextMinute = new Date (someDate.getTime () + 60 * 1000); – Dan 4 April 2013 в 13:30
  • 4
    Это опечатка? «между 2 днями». Вероятно, между двумя датами. – tomazahlin 16 August 2016 в 12:13
<html>
<head>
<script>
function dayDiff()
{
     var start = document.getElementById("datepicker").value;
     var end= document.getElementById("date_picker").value;
     var oneDay = 24*60*60*1000; 
     var firstDate = new Date(start);
     var secondDate = new Date(end);    
     var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    document.getElementById("leave").value =diffDays ;
 }
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>
0
ответ дан Sukanya Suku 21 August 2018 в 22:23
поделиться

См. JsFiddle DEMO

    var date1 = new Date();    
    var date2 = new Date("2015/07/30 21:59:00");
    showDiff();

function showDiff(date1, date2){

    var diff = (date2 - date1)/1000;
    var diff = Math.abs(Math.floor(diff));

    var days = Math.floor(diff/(24*60*60));
    var leftSec = diff - days * 24*60*60;

    var hrs = Math.floor(leftSec/(60*60));
    var leftSec = leftSec - hrs * 60*60;

    var min = Math.floor(leftSec/(60));
    var leftSec = leftSec - min * 60;

    document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";

setTimeout(showDiff,1000);
}

для вашего кода HTML:

<div id="showTime"></div>
5
ответ дан tika 21 August 2018 в 22:23
поделиться
var getDaysLeft = function (date1, date2) {
   var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
   var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);   
   return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);
0
ответ дан Vin S 21 August 2018 в 22:23
поделиться
[g0] этот код заполняет продолжительность учебного года, когда вы вводите дату начала и конечную дату (квалифицированная начисленная дата) обучения и проверяете, если продолжительность меньше года, если да, в сообщении учитывается три элемента ввода. первый [f2] и второй [f3] и третий [f4] [/g0] [g1] покажет результат числа лет с дробью [/g1] preg_replace('/\s+/', ' ', $description)
0
ответ дан Alexander Elgin 4 November 2018 в 19:27
поделиться
  • 1
    Никогда не анализируйте строки даты, чтобы найти год, потому что внешний вид строки (особенно разделители) отличается в разных браузерах. Используйте preg_replace('/\s+/', ' ', $description), который был разработан для этого. ------- Смотрите библиотеку datejs в googlecode, которая, возможно, поддерживает большинство угловых случаев – Dan 4 April 2013 в 13:06
  • 2
    спасибо за совет @Dan, но он работал и проверен для меня на реальном правительственном проекте (различные браузеры), это слабая практика программирования? :) – shareef 4 April 2013 в 14:10
Другие вопросы по тегам:

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