sethours更新时间部分但不是日期时间字段中的日期部分

时间:2015-09-22 08:03:39

标签: javascript date datetime dynamics-crm-2011 microsoft-dynamics

我的日期时间字段只将日期作为格式。另外,我在onload上添加了一个脚本,这样无论何时访问记录12:00都应该添加到该字段中。它按预期工作,并在时间部分增加12小时。但它没有相应地更新日期。

例如,我的日期成为经理字段,其值为'Thu Apr 30 23:00:00 UTC-1200 1992'。添加12小时后,它会将时间部分更新为'Thu Apr 30 12:00:00 UTC-1200 1992',但不会在其日期添加任何内容。以下是我要更新的代码段。

    function updateFields(field){
    var dateField = Xrm.Page.getAttribute(field);
    if(dateField.getValue()== null)
    {
        dateField.setValue(new Date());
    }
    dateField.setValue(dateField.getValue().setHours(12, 0, 0));
}

如果我做错了,请告诉我。

3 个答案:

答案 0 :(得分:2)

setHours只有更改时间,它不会计算任何内容。

执行此类计算的最常用方法是:

var numberOfHours = 12; // how many hours you want to add. Can be *negative* too.
var millisecondsInAnHour = 60 * 60 * 1000; // this is constant
var offset = numberOfHours * millisecondsInAnHour;
var newFieldValue = dateField.getValue().getTime() + offset;
dateField.setValue(newFieldValue);

基本上,您可以获取值的时间并为其添加/减去毫秒数。

答案 1 :(得分:1)

所以要明确的是,你想在当前日期值上加12小时,(而不是只将时间元素设置为12:00)?

setHours只是设定时间,它不会增加12小时。如果你多次这样做,它总是12小时,而不是0-12-24。

如果将setHoursgetHours合并,则应该能够实现所需的行为。

var d1 = new Date();
console.log("Original Date: " + d1);
d1.setHours(12);
console.log("Set 12 Hours Once: " + d1);
d1.setHours(12);
console.log("Set 12 Hours Twice: " + d1);

var d2 = new Date();
console.log("Original Date 2: " + d2);
d2.setHours(d2.getHours() + 12);
console.log("Add 12 Hours Once: " + d2);
d2.setHours(d2.getHours() + 12);
console.log("Add 12 Hours Twice: " + d2);

输出:

Original Date: Tue Sep 22 2015 09:45:39 GMT+0100 (GMT Daylight Time)
Set 12 Hours Once: Tue Sep 22 2015 12:45:39 GMT+0100 (GMT Daylight Time)
Set 12 Hours Twice: Tue Sep 22 2015 12:45:39 GMT+0100 (GMT Daylight Time)
Original Date 2: Tue Sep 22 2015 09:45:39 GMT+0100 (GMT Daylight Time)
Add 12 Hours Once: Tue Sep 22 2015 21:45:39 GMT+0100 (GMT Daylight Time)
Add 12 Hours Twice: Wed Sep 23 2015 09:45:39 GMT+0100 (GMT Daylight Time)

答案 2 :(得分:1)

我刚刚更新了我的代码并且它有效。请查看以下代码段。

function updateFields(field){
var dateField = Xrm.Page.getAttribute(field);
if(dateField.getValue()== null)
{
    dateField.setValue(new Date());
}
dateField.setValue(dateField.getValue().setHours(dateField.getValue().getHours() + 12));}