结合日期格式化变量和函数(jQuery/Javascript)
问题描述:
我有一点点的JavaScript,获取不同的日期范围并格式化它们以返回yyyymmdd。我得到了我需要的最终结果,但是有两个不同的变量让我感到困惑,并且让我觉得我没有这样做是最好的方式。我想知道是否有办法通过新日期和额外删除 - 全部在一行中。结合日期格式化变量和函数(jQuery/Javascript)
我的功能是:
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, "");
如果有更好的方法来得到这样的结果,或至少将dateYesterday
和dateYesterdayFormat
合并为一行即可获得yyymmdd。
(我需要保持 - 在函数结果,所以我不能有过滤。)
谢谢!
答
你的问题还不清楚。
toJSONLocalMonth只会返回一个值,从第一回语句之一。第二个是永远不会到达的。
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日期字符串。我想你应该避开内置的方法,因为它们使用的是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?
很抱歉,如果我的问题不是很清楚,但你已经帮了我不少优化该功能,并了解它是如何工作的,而不是依靠“神奇”的:)谢谢! –