【问题标题】:new Date always returning 1 day behind新日期总是晚 1 天返回
【发布时间】:2019-02-15 20:29:44
【问题描述】:

我有以下 new Date() 代码以及一个将 new 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;

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

【问题讨论】:

    标签: angularjs date servicenow


    【解决方案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) 抵消,从而有效地将您的一天更改为前一天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2020-06-18
      • 2018-11-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多