изменения объекта даты JavaScript - PullRequest
2 голосов
/ 18 февраля 2012

Я уже несколько дней читаю даты, вроде бы ходя кругами здесь. У меня есть строка в БД, которая выглядит следующим образом

2012,03,13,01,31,38

Я хочу создать объект даты js из него, чтобы ...

new Date(2012,03,13,01,31,38);

Достаточно просто, верно? Но это возвращается как

2012-04-13 05:31:38 +0000

Таким образом, месяц выключен на 1, а время выключено на 4 часа (может быть DST или связанный с часовым поясом ???). Я просто хочу дату, которая соответствует той, которую я предоставил. Это сводит меня с ума, имея дело с этими объектами даты JS.

Как я могу быть уверен, что объект даты совпадает с датой и временем, указанными в строке, мне не нужны изменения часового пояса или летнего времени, просто дата, соответствующая строке.

Более подробная информация о применении: Мое приложение для этой цели предназначено для приложения для iphone, которое я разрабатываю на Titanium (которое создается с использованием JS). По сути, часть моего приложения связана с регистрацией данных, и с помощью этого журнала я собираю текущую дату и время устройства. Я сохраняю всю эту информацию в базе данных MySQL. Поле в базе данных выглядит следующим образом: «2012-02-16 00:12:32»

Здесь я начинаю сталкиваться с проблемами. Теперь я предлагаю возможность редактировать журнал, включая дату и время его регистрации. Чтобы использовать «сборщик» iPhone, я должен снова преобразовать приведенную выше строку в объект даты JS. Это обычно портит мне жизнь. По сути, мне нужно создать новый объект даты с указанной выше датой, причем часовой пояс и dst совершенно не имеют значения, поэтому при сохранении обратно в БД это просто строка выше, измененная согласно запросу пользователя. При этом не важно, редактируют ли они в Пенсильвании или Китае, они редактируют одну и ту же дату журнала.

Извините, если это сбивает с толку. Я с трудом выясняю всю эту дату.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2012

Это зависит от того, какая у вас строка.Если в этой строке указано время UTC, вам необходимо проанализировать ее следующим образом.Если это местное время, вам нужно проанализировать его как местное время.Вы можете создать вспомогательный метод, подобный этому, для этой части:

function getDate(utc, year, month, day, hour, minute, second) {
  if(utc) {
    var utc = Date.UTC(year, month - 1, day, hour, minute, second);
    return new Date(utc);
  } else {      
    return new Date(year, month - 1, day, hour, minute, second);
  }
}

Теперь, чтобы проанализировать вашу строку, вы можете использовать это:

function fromString(utc, str) {
  var parts = str.split(',');

  var year = parts[0];
  var month = parts[1];
  var day = parts[2];
  var hour = parts[3];
  var minute = parts[4];
  var second = parts[5];

  return getDate(utc, year, month, day, hour, minute, second);
}

, который вы можете использовать так для своегопример:

var d = fromString(true, '2012,02,13,00,31,38'); // If UTC
var d = fromString(false, '2012,02,13,00,31,38'); // If local time

Вот рабочий jsFiddle, с которым вы можете играть:

, который также показывает два способа печатидата (UTC или местная).Надеюсь, это поможет.

0 голосов
/ 26 октября 2017

У меня была такая же проблема.Есть две причины странного изменения времени:

  1. Используйте new Date(Date.UTC(2012,03,13,01,31,38)), чтобы избежать изменения времени.
  2. Обратите внимание, что месяц основан на нуле !Месяцы идут от 0 до 11 для этой функции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...