javascript - получить следующий день строки - PullRequest
8 голосов
/ 21 июля 2009

У меня есть переменная пример = "05-10-1983"

Как я могу получить «следующий день» строки пример ?

Я пытаюсь использовать объект Date ... но ничего ...

Ответы [ 8 ]

12 голосов
/ 21 июля 2009

Это будет сделано для простых сценариев, таких как тот, который у вас есть:

var example = '05-10-1983';
var date = new Date();
var parts = example.split('-');
date.setFullYear(parts[2], parts[0]-1, parts[1]); // year, month (0-based), day
date.setTime(date.getTime() + 86400000);
alert(date);

По сути, мы создаем пустой объект Date и устанавливаем год, месяц и дату с помощью функции setFullYear(). Затем мы получаем метку времени с этой даты, используя getTime(), добавляем к ней 1 день (86400000 миллисекунд) и возвращаем ее обратно к дате, используя функцию setTime(). *

Если вам нужно что-то более сложное, чем это, например, поддержка различных форматов и тому подобное, вы должны взглянуть на библиотеку datejs , которая делает для вас немало работы.

5 голосов
/ 11 февраля 2013

Вы можете сделать следующее:

var nextDay;
var example = "05-10-1983";

nextDay = new Date(example);
nextDay.setDate(nextDay.getDate() + 1);

#getDate / #setDate получает / устанавливает текущий день месяца (1-31).

После запуска вышеописанного, nextDay будет установлено на любую дату завтрашнего дня. Это также переносит на следующий месяц / год, если это конец месяца, и даже обрабатывает високосные годы. :)

4 голосов
/ 21 июля 2009
new Date(+new Date('05-10-1983'.replace(/-/g,'/')) + 24*60*60*1000)
3 голосов
/ 14 октября 2011

Проблема с подходом +86400000 заключается в возможности ошибки при пересечении барьера перехода на летнее время. Например, я на EST. Если я сделаю это:

var d = new Date("11/04/2012 00:00:00");
var e = new Date(d.getTime() + 86400000);

e будет 4.11.2012 23:00:00 Если вы затем извлечете только часть даты, вы получите неправильное значение. Недавно я столкнулся с этой проблемой при написании элемента управления календаря.

это сделает это лучше (и с гибким смещением, которое позволит вам делать больше, чем 1 день в будущем):

function getTomorrow(d,offset) {
    if (!offset) { offset = 1 }
    return new Date(new Date().setDate(d.getDate() + offset));
}
2 голосов
/ 25 октября 2012

So

var d = new Date("11/04/2012 00:00:00");
var e = new Date(d.getTime() + 86400000);

не работает из-за барьеров для перехода на летнее время. Я столкнулся с той же проблемой. В итоге я сделал что-то вроде этого:

function next_day(date) {
  var e = new Date(date.getTime() + 24 * 60 * 60 * 1000);
  if e.getHours() != date.getHours() {
    e = new Date(e.getTime() + (e.getHours() - date.getHours()) * 60 * 60 * 1000)
  }
  return e;
}
0 голосов
/ 28 июля 2015

Существуют високосные секунды, високосные дни, летнее время и т. Д., Поэтому во всех случаях эту проблему можно решить непросто.

На мой взгляд, лучший способ решить эту проблему (без библиотеки дат) - воспользоваться функцией переполнения конструктора Date [1]:

main();

function main() {
  var date = uniqueDateParse( '05-10-1983' );
  var newDate = nextDay( date );

  print( date );
  print( newDate );
}

function uniqueDateParse( string ) {
  var stringArray = string.split( '-', 3 );
  var month = stringArray[ 0 ],
      day   = stringArray[ 1 ],
      year  = stringArray[ 2 ];
  // Per ISO 8601[2], using Pacific Daylight Time[3].
  var dateString = year + '-' + month + '-' + day + 'T00:00:00-07:00';
  return new Date( dateString );
} 

function nextDay( date ) {
  return new Date( date.getFullYear()
                 , date.getMonth()
                 , date.getDate() + 1 );
}

function print( object ) {
  console.log( object );
}

Ссылки

[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters

[2] http://www.w3.org/TR/NOTE-datetime

[3] http://www.timeanddate.com/time/zones/pdt

0 голосов
/ 11 июля 2013

Вы можете узнать индекс дня с помощью функции getDay() и создать массив строк дней следующим образом-

day = new Date(YourDate);

var dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

day = dayArray[day.getDay()+1];
0 голосов
/ 21 июля 2009

Вы можете использовать фреймворк php.js. Гугл за это. Это включает в себя расширенные функции даты и более

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...