Jump to content
  • 0

Javascript date


Самая сладкая
 Share

Question

Есть дата (строковая переменная) 20130401

как уменьшить строку на день, чтобы было 20130331, а не 20130400?

Вычесть единицу не катит

var day = (((r.substring(0, 2)) * 1) - 1;

var month = (r.substring(2, 4)) * 1;

var year = (r.substring(4, 6)) * 1;

Edited by Самая сладкая
Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0


var d = new Date(2013, 4, 1);
var milliseconds = d.getMilliseconds() - 24 * 60 * 60 * 1000;
d.setMilliseconds(milliseconds);
alert(d);

а если дата уже заранее задана строкой, тогда ее надо преобразовать в дату, да?

и какой результат выдаст ваш код если дата 1 апреля

у меня приходит:

Mon Dec 31 201303 00:00:00 GMT+0400 (Russian Standard Time)

Edited by Самая сладкая
Link to comment
Share on other sites

  • 0
чтобы было не 20130331, а 20130400?

А какой смысл в такой записи? Вообще-то первое апреля минус день — именно 31 марта, а не нулевое апреля...

А кто вам мешает посчитать 24*60*60 и вычесть это число из переменной?

Во-первых, не во всех странах все сутки в году имеют такую продолжительность. Во-вторых, результатом такой процедуры по всем раскладам будет 31 марта, а автору тему зачем-то нужно "нулевое апреля"...

Link to comment
Share on other sites

  • 0

Так, возможно я вас неправильно понял. Вам что надо? Я думал вам надо корректно вычесть день из определенной даты, не?

не, у меня дата генерируется текущая. но она в формате string.

потом нужно дату уменьшить на 1 день (задание такое) и вывести

и в результате этого косяк.

если текущая дата = 20130401, то выводится 20130400

(чего уж и говорить об уменьшении даты 20130101)

чтобы было не 20130331, а 20130400?

А какой смысл в такой записи? Вообще-то первое апреля минус день — именно 31 марта, а не нулевое апреля...

А кто вам мешает посчитать 24*60*60 и вычесть это число из переменной?

Во-первых, не во всех странах все сутки в году имеют такую продолжительность. Во-вторых, результатом такой процедуры по всем раскладам будет 31 марта, а автору тему зачем-то нужно "нулевое апреля"...

автор переусердствовал.

результатом у меня является 00 апреля, а должно 31 марта, т.к. дата генерируется раннее, но в формате string

Edited by Самая сладкая
Link to comment
Share on other sites

  • 0

ранее генерируется число - № заказа из которого мы получаем дату.

-19 для того, чтобы проверить работу

var day = ((r.substring(0, 2)) * 1) - 19;
var month = (r.substring(2, 4)) * 1;
var year = (r.substring(4, 6)) * 1;

day = day.toString();
month = month.toString();

if (day.length == 1)
day = "0" + day;

if (month.length == 1)
month = "0" + month;

var date = "20" + year.toString() + month + day;

var converted = Date.parse(date);
var myDate = new Date(converted);

var milliseconds = myDate.getMilliseconds() - 24 * 60 * 60 * 1000;
myDate.setMilliseconds(milliseconds);

:) ясно :)

Тогда, возможно, как-то так?

как запихнуть

 document.body.innerHTML += '' + newYear + newMonth + newDate;

в переменную?

Edited by Самая сладкая
Link to comment
Share on other sites

  • 0

Просто присвоить правую часть этой нужной переменной, а не document.body.innerHTML (она в примере чисто для наглядности).

он мне на какую-то 1 ругается.

20130401 изначально является строкой, а не датой

Link to comment
Share on other sites

  • 0

Всё верно, мы ее как строку и разбираем (в моем примере — регулярным выражением, но можно и substring-ом, как у вас изначально). Потом подставляем компоненты в конструктор даты (вычитая всё, что нужно, откуда нужно), получаем компоненты этой новой даты и склеиваем в нужной последовательности. Объект Date берет на себя всю календарную арифметику, включая високосные годы и т.п.

Можно глянуть полный итоговый код?

Link to comment
Share on other sites

  • 0

Можно глянуть полный итоговый код?

генерируем № заказа (переменная R) - текущая дата + куча ненужной инфы.

достаем оттуда текущую дату. 19 вычитаем для проверки работы


var day = ((R.substring(0, 2)) * 1) - 19;
var month = (R.substring(2, 4)) * 1;
var year = (R.substring(4, 6)) * 1;

day = day.toString();
month = month.toString();

if (day.length == 1)
day = "0" + day;

if (month.length == 1)
month = "0" + month;

var myDate = "20" + year.toString() + month + day;

var dateParts = date.match(/(\d{4})(\d{2})(\d{2})/),
year = dateParts[1],
month = dateParts[2],
day = dateParts[3];

var tmpDate = new Date(year, month-1 /* нумерация с 0 */ , day -1),
newYear = tmpDate.getFullYear(),
newMonth = (tmpDate.getMonth()+1),
newDate = tmpDate.getDate();

if (newMonth < 10) newMonth = "0" + newMonth;
if (newDate < 10) newDate = "0" + newDate;

zzz = '' + newYear + newMonth + newDate;

Где-то ниже выводим zzz

Edited by Самая сладкая
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Владислав_Белкин
      Имею вот такой код в HTML
      <form name="z" action="test.php" method="POST">
      <input type="date" data-clear-btn="false" name="date-1" id="date-1" class="date" value="">
      И вот такой в php
      $a=$_POST[`date_1`];
      $c=mktime($a);
      нужно чтобы на вход в mktime было 4 параметра
      int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
      как в моем конкретном случае мне из переменной $a получить эти 4 параметра
    • By Самая сладкая
      Как получить в Javascript текущее время в формате hh:mm:ss?
    • By Самая сладкая
      Код для валидации даты

      var day = parseInt(R.substring(0, 2), 10) ;
      var month = parseInt(R.substring(2, 4), 10);
      var year = 2000 + parseInt(R.substring(4, 6), 10);

      var tmpDate = new Date(year, month-1 /* нумерация с 0 */ , day),
      newYear = tmpDate.getFullYear(),
      newMonth = (tmpDate.getMonth()+1),
      newDate = tmpDate.getDate();

      if (newMonth < 10) newMonth = "0" + newMonth;
      if (newDate < 10) newDate = "0" + newDate;

      var zzz = ' ' + newDate + newMonth + newYear + R.substring(6, R.length);
      как сделать, чтобы год выводился в формате YY?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy