新日期总是比原日期晚1天

时间:2019-02-15 20:29:44

标签: angularjs date servicenow

对于新的Date(),我具有以下代码,以及将新的Date()格式化为易于消化的函数:

data.onbCase.push({
                    first_name: onbCase.getDisplayValue('subject_person.first_name'),
                    last_name: onbCase.getDisplayValue('subject_person.last_name'),
                    start_date: formatDate(new Date(onbCase.getDisplayValue('hr_profile.employment_start_date')))   
                });

function formatDate(date) {

    var monthNames = [
        "January", "February", "March",
        "April", "May", "June", "July",
        "August", "September", "October",
        "November", "December"
    ];

    var day = date.getDate(), 
            monthIndex = date.getMonth(),
            year = date.getFullYear();

    return new Date(monthNames[monthIndex].substr(0,3) + ' ' + day + ', ' + year);
}

      <td ng-show="c.options.start_date" title="{{item.start_date}}">{{item.start_date | date:'mediumDate'}}</td>

但是,它总是返回比正确日期晚一天的日期。有人可以解释为什么会发生这种情况以及如何解决吗?我知道我可以简单地将1添加到getDate():

var day = date.getDate() +1;

这似乎不正确,尽管...有什么建议吗?

1 个答案:

答案 0 :(得分:1)

有关更多信息,请参见以下问题:Is the Javascript date object always one day off?

new Date()字符串解析器不可靠,因为对于不同的字符串日期格式,您将获得不同的结果。

new Date()
// Fri Feb 15 2019 15:08:14 GMT-0600 (Central Standard Time)

new Date("2019-02-15")
// Thu Feb 14 2019 18:00:00 GMT-0600 (Central Standard Time)

new Date("2019-02-15 00:00:00")
// Thu Feb 15 2019 18:00:00 GMT-0600 (Central Standard Time)

new Date("02/15/2019")
// Fri Feb 15 2019 00:00:00 GMT-0600 (Central Standard Time)

某些日期格式(尤其是如果您不包括时间信息的话)会将日期视为格林威治标准时间,然后通过计算机的区域设置来抵消日期。这将导致日期被负6小时(CST)抵消,从而有效地将您的日期更改为前一天。