【问题标题】:Combine date formatting vars and functions (jquery/Javascript)结合日期格式化变量和函数(jquery/Javascript)
【发布时间】:2016-11-18 17:37:20
【问题描述】:

我有一些 javascript 可以获取不同的日期范围并将它们格式化以返回 yyyymmdd。我得到了我需要的最终结果,但是有 2 个不同的变量让我感到困惑,让我觉得我这样做并不是最好的方法。我想知道是否有办法通过新日期和额外删除 - 全部在一行中。

我的功能是:

function toJSONLocalMonth (firstDay, lastDay) {//set default date range to from beggining of this month
    var local = new Date(firstDay);
    local.setMinutes(firstDay.getMinutes() - firstDay.getTimezoneOffset());
    return local.toJSON().slice(0, 10); 

    var local = new Date(lastDay);
    local.setMinutes(lastDay.getMinutes() - lastDay.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

每当我需要结果时,我都会这样做:)今天和昨天的示例)

var dateToday = new Date();
dateTodayFormat = toJSONLocalMonth(dateToday).replace(/-/g, "");//format date yyyymmdd
dateYesterday = dateToday.setDate(dateToday.getDate() - 1);
dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, "");

如果有更好的方法来获得这个结果,或者至少将dateYesterdaydateYesterdayFormat 合并到一行以获得 yyymmdd。

(我需要在函数结果中保留-,所以我不能在那里过滤它。)

谢谢!

【问题讨论】:

    标签: javascript jquery date format date-format


    【解决方案1】:

    你的问题不清楚。

    toJSONLocalMonth 只会返回一个值,即来自第一个 return 语句的值。永远无法达到第二个。

    dateToday.setDate(...) 的返回值是时间值(数字),而不是日期,因此您不能将字符串方法链接到它。它会修改日期本身,因此 dateYesterday 是多余的,即

    dateYesterday = dateToday.setDate(dateToday.getDate() - 1);
    dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 
    

    可以是:

    dateToday.setDate(dateToday.getDate() - 1);
    var dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 
    

    toJSONLocalMonth 似乎只是获取格式为 YYYYMMDD 的日期字符串。我猜您正在避免使用内置 ISO 方法,因为它们使用 UTC/GMT 而不是本地时区。以下函数以更明显的方式做到这一点:

    /*  Return an ISO 8601 formatted date string
    **  @param {Date} d - date to create string for
    **  @returns {string} string formatted as ISO 8601 without timezone
    */
    function toISOStringLocal(d) {
      function z(n){return (n<10?'0':'') + n}
      return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' +
             z(d.getDate()) + 'T' + z(d.getHours()) + ':' +
             z(d.getMinutes()) + ':' + z(d.getSeconds())
              
    }
    
    console.log(toISOStringLocal(new Date));

    您也可以考虑使用像 fecha.js 这样的小型格式库:

    var dateToday = new Date();
    var dateTodayFormat = fecha.format(dateToday, 'YYYYMMDD')
    dateToday.setDate(dateToday.getDate() - 1);
    var dateYesterdayFormat = fecha.format(dateToday, 'YYYYMMDD');
    

    最后两行可以合二为一:

    var dateYesterdayFormat = fecha.format(new Date(dateToday.setDate(dateToday.getDate() - 1)), 'YYYYMMDD');
    

    但我不建议这样做。

    另见:Where can I find documentation on formatting a date in JavaScript?

    【讨论】:

    • 对不起,如果我的问题不是很清楚,但您在优化此功能和了解它的工作原理方面帮助了我很多,而不是依赖“魔术”:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多