我正在使用選取器(Ti.UI.Picker
)並將類型設置爲Ti.UI.PICKER_TYPE_TIME
。其目的是允許用戶更改數據庫中日期條目的時間。日期存儲在UTC時間戳中。流動是這樣的:Titanium/Appcelerator - 使用時間選擇器生成具有當地時間差的日期對象
- 用戶打開控制器
- 日期是從DB中提取,以及使用該方法
moment.utc()
存儲爲矩JS日期對象。 - 用戶選擇打開選擇器來改變時間
- 的
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