Я использую сборщик (Ti.UI.Picker
) и задаю тип Ti.UI.PICKER_TYPE_TIME
. Цель состоит в том, чтобы позволить пользователю изменить время записи даты в базе данных. Дата хранится в метке времени UTC. Поток идет как это:Titanium/Appcelerator - используя сборщик для времени, создает объект даты с локальной разницей времени
- Пользователь открывает контроллер
- дата извлекается из БД, и хранится в виде объекта Момент даты JS, с использованием метода
moment.utc()
. - Пользователь выбирает, чтобы открыть окно выбора для изменения времени
- Метод
moment.toDate()
используется для передачи требуемого объекта даты в селекторе - Початкоотделитель открывается со временем, которое было исправлено в соответствии с настройкой часового пояса на их телефон например: +1 час.
- Когда пользователь выполнен, сборщик возвращает объект даты, и результирующее время не является тем, что они выбрали; в этом случае это -1 час.
Я думал, что используя moment.utc()
, я смог бы избежать этого. Но, возможно, сборщик делает некоторые внутренние вещи с обычным объектом даты JavaScript, тем самым получая эту корректировку во времени.
Есть ли способ обойти это? Моя цель в том, что; если первоначальное время составляет 13:00, я хочу, чтобы сборщик был открыт с 13:00, а затем, если пользователь изменит его на 15:00, я хочу, чтобы результат от сборщика составлял 15:00, а соответствующий ярлык отображался как 15:00.
Вот некоторые примеры кода
var moment = require('alloy/moment');
var time_unix = 1396815002000;
var date_obj = moment.utc(time_unix);
function updateTimeLabel() {
$.timeLabel.setText(date_obj.format('HH:mm'));
}
function onTimeClick() {
var pickerView = Titanium.UI.createView({
backgroundColor: "#FFF",
height: 280,
bottom :-280,
zIndex: 1000
});
var cancel = Ti.UI.createButton({
title:'Cancel',
style: Ti.UI.iPhone.SystemButtonStyle.BORDERED
});
var done = Ti.UI.createButton({
title:'Done',
style: Ti.UI.iPhone.SystemButtonStyle.DONE
});
var spacer = Ti.UI.createButton({
systemButton: Ti.UI.iPhone.SystemButton.FLEXIBLE_SPACE
});
var toolbar = Ti.UI.iOS.createToolbar({
top: 0,
barColor: '#000',
items:[cancel,spacer,done]
});
var picker = Ti.UI.createPicker({
type: Ti.UI.PICKER_TYPE_TIME,
value: date_obj.toDate(), // does the problem occur here?
minDate: new Date('1950-01-01'),
maxDate: new Date('2050-01-01'),
top: 45
});
cancel.addEventListener('click', function() {
console.log('cancel pressed');
pickerView.animate({bottom: 0, duration: 500});
});
done.addEventListener('click', function (evt) {
date_obj = moment.utc(picker.getValue());
updateTimeLabel(); // result is 1 hour less than picker
pickerView.animate({bottom: -280, duration: 500});
});
pickerView.add(toolbar);
pickerView.add(picker);
$.win.add(pickerView);
// picker opens with time that is +1 hour
pickerView.animate({bottom: 0, duration: 500});
}
$.win.open();
updateTimeLabel();
Это должен быть комментарий, а не ответ. – RobG
Я надеюсь избежать какой-либо поправки к часовому поясу/дневного света, поскольку я слышал, что это чревато подводными камнями, но я определенно хотел бы получить ответ, который бы решительно разрешал проблему любому пользователю в любой часовой пояс. – shrewdbeans