2015-11-25 1 views
4

Я создал небольшую программу, чтобы выбрать дату с помощью bootstrap-datepicker и записать ее в MySQL.bootstrap-datepicker: Как использовать определенный часовой пояс?

Уловка заключается в том, что эта дата должна быть локальной для Europe/Berlin независимо от того, где находится пользователь.

$(....).datepicker({ startDate: 'today' }); 

Мой вопрос: как установить startDate быть локальными для конкретного часового пояса без использования код на стороне сервера (PHP) или какие-либо другие библиотеки?

Я пробовал использовать moment + moment-timezone, но также показывает дату локального браузера.

var todaysDate = moment().tz('Europe/Berlin').format(); 
$(...).datepicker({ startDate: todaysDate }); 

Спасибо.

ответ

1

Просто необходимо

moment.tz.setDefault("Europe/Berlin");

После этого момента генерироваться правильную дату без использования tz(). Также убедитесь, что формат соответствует.

var todaysDate = moment().format('D MMM YYYY'); 
$(...).datepicker({ format: 'dd M yyyy', startDate: todaysDate }); 
+1

Я получаю следующую ошибку. _Uncaught TypeError: опция startDate не распознается! _ –

2

Объект даты всегда будет находиться в локальном часовом поясе (на основе браузера).

dateObj.getTime() даст вам абсолютные миллисекунды.

http://momentjs.com/ отличная библиотека для преобразования часового пояса.

EDIT

О том, как:

var newYork = moment.tz("2014-06-01 12:00", "America/New_York"); 
var losAngeles = newYork.clone().tz("America/Los_Angeles"); 
var london  = newYork.clone().tz("Europe/London"); 

newYork.format(); // 2014-06-01T12:00:00-04:00 
losAngeles.format(); // 2014-06-01T09:00:00-07:00 
london.format();  // 2014-06-01T17:00:00+01:00 

и

By default, moment parses and displays in local time.

Это точный код с веб-сайта. Если вы не пройдете America/New_York и просто moment("2014-06-01 12:00"), он получит местное время.

moment().utcOffset() Функция получит вас utcOffset, если вы хотите узнать, какой момент времени интерпретируется.

Смотрите демо в jsFiddle

+0

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

0

Может быть что-то вроде this вы можете получить в правильном направлении?

HTML

<div class='input-group date date-time-picker'> 
    <input type='text' class="form-control" placeholder="Start Time"/> 
    <span class="input-group-addon"> 
     <i class="glyphicon glyphicon-calendar"></i> 
    </span> 
</div> 

JavaScript

var options = { 
    format: 'mm/dd/yyyy hh:ii', 
    autoclose: true 
}; 

$('.date-time-picker').datetimepicker(options).on("changeDate", function (e) { 
    var TimeZoned = new Date(e.date.setTime(e.date.getTime() + 
          (e.date.getTimezoneOffset() * 60000))); 
    $(this).datetimepicker('setDate', TimeZoned); 
}); 
+0

ад не знаю, что значит: «ii» в формате времени - а также, почему вы умножаете его на 60k? – Lightning3

+1

@ Lightning3 Это формат, используемый плагином: http://www.malot.fr/bootstrap-datetimepicker/.'getTimezoneOffset()' возвращает смещение в минутах, 'getTime()' возвращает текущее время в миллисекундах. Так что это всего лишь переход от минут до миллисекунд. – Arg0n