C# datetimeoffset未正确发回-MomentJS
技术 敲除JS、敲除映射插件、MomentJS、SQL Server、C#Web服务 问题 通过模式弹出窗口添加时间条目,将开始时间设置为上午7:30至下午4:30。我希望无论用户处于哪个时区,情况都是如此。这看起来很好,但当我通过ajax保存结果时,它会将结果更改为11:30和20:30。它不包括时区,我觉得这是一个问题,但需要澄清。我现在只经营本地业务,所以都在东部时间 思想 我希望数据库显示7:30-4:00,还是我的想法不正确?我还需要它正确加载,目前也是这样,但我担心,如果我的服务器/数据库在芝加哥时间和用户在EST它不会正确加载回来 代码 新时间输入 控制台结果 员工工时视图模型 模态弹出窗口 客户端保存代码C# datetimeoffset未正确发回-MomentJS,c#,jquery,html,knockout.js,momentjs,C#,Jquery,Html,Knockout.js,Momentjs,技术 敲除JS、敲除映射插件、MomentJS、SQL Server、C#Web服务 问题 通过模式弹出窗口添加时间条目,将开始时间设置为上午7:30至下午4:30。我希望无论用户处于哪个时区,情况都是如此。这看起来很好,但当我通过ajax保存结果时,它会将结果更改为11:30和20:30。它不包括时区,我觉得这是一个问题,但需要澄清。我现在只经营本地业务,所以都在东部时间 思想 我希望数据库显示7:30-4:00,还是我的想法不正确?我还需要它正确加载,目前也是这样,但我担心,如果我的服务器/
self.SaveTimeEntries=函数(){
IsSaving(“时间条目”);
对于(var idx=0;idx
服务器保存代码
Aaah Javascript和日期,永远让开发人员感到困惑。我通常在数据库中以utc格式保存日期,并使用即时区域设置。在用户的时区中显示它的矩.utc(utcDateString).local().format(formatString)。嗨,Shadowfox,是的,弄明白这一点是一件痛苦的事。我把这个问题追溯到我用来选择日历和时间的图书馆。引导日期时间选择器v3。我使用的日期不是它使用的日期,所以我们都离开了。如果我有空,我会把我的发现发出去。
self.NewTimeEntry = function () {
var today = new Date();
console.log(moment(moment().format('MM/DD/YYYY')).add(7, 'h').add(30, 'm'));
console.log(moment(moment().format('MM/DD/YYYY')).add(16, 'h').add(30, 'm'));
var newEntry = {
ID: -1,
EmployeeID: -1,
WorkorderID: self.WorkorderID(),
JobDate: today,
Description: '',
LunchBreak: 0.5,
StartedOn: moment(moment().format('MM/DD/YYYY')).add(7, 'h').add(30, 'm'),
FinishedOn: moment(moment().format('MM/DD/YYYY')).add(16, 'h').add(30, 'm')
};
self.EmployeeHoursModal.unshift(new EmployeeHour(self, newEntry));
ScrollToTop('#' + self.WorkorderHoursModalID() + ' .modal-body')
}
function EmployeeHour(parent, dto) {
var self = this;
dto = dto || {};
var mapping = { 'ignore': ['__type', '_type', 'type'] }
ko.mapping.fromJS(dto, mapping, self);
self.LunchBreakOptions = ko.observableArray([
new RadioButton('No Lunch', 0, self.LunchBreak, function () { return self.LunchBreak() == 0; }),
new RadioButton('15', .25, self.LunchBreak, function () { return self.LunchBreak() == .25; }),
new RadioButton('30', .50, self.LunchBreak, function () { return self.LunchBreak() == .50; }),
new RadioButton('45', .75, self.LunchBreak, function () { return self.LunchBreak() == .75; }),
new RadioButton('1 Hour', 1, self.LunchBreak, function () { return self.LunchBreak() == 1; })
]);
self.StartedOn = ko.observable(moment(dto.StartedOn));
self.FinishedOn = ko.observable(moment(dto.FinishedOn));
self.CalculateTotal = ko.computed(function () {
if (self.StartedOn() != null && self.FinishedOn() != null) {
var endTime = moment.utc(self.FinishedOn()).subtract((60 * self.LunchBreak()), 'm').toDate();
var totalTime = moment.utc(moment.utc(endTime, "DD/MM/YYYY HH:mm:ss").diff(moment.utc(self.StartedOn(), "DD/MM/YYYY HH:mm:ss"))); //.format("HH:mm");
if (parseInt(totalTime.format('HH')) == 1) {
return parseInt(totalTime.format('HH')) + ' Hour' + ((parseInt(totalTime.format('mm')) > 0) ? ' and ' + totalTime.format('mm') + ' minutes' : '');
} else {
return parseInt(totalTime.format('HH')) + ' Hours' + ((parseInt(totalTime.format('mm')) > 0) ? ' and ' + totalTime.format('mm') + ' minutes' : '');
}
} else {
return 'None';
}
});
}
self.SaveTimeEntries = function () {
IsSaving('time entries');
for (var idx = 0; idx < self.EmployeeHoursModal().length; ++idx) {
var hourDTO = {
dto: ko.toJS(self.EmployeeHoursModal()[idx])
};
PostDTO('/WorkorderService.asmx/SaveJobHour', hourDTO, function (obj) {
self.EmployeeHoursModal()[idx].ID(obj.ID);
});
}
SavedSuccessfully();
}