结合日期格式化变量和函数(jquery / Javascript)

时间:2016-11-18 17:37:21

标签: javascript jquery date format date-format

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

我的职责是:

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。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

你的问题不清楚。

toJSONLocalMonth 只会返回一个值,即第一个 return 语句中的值。第二个永远不会到达。

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

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?