📄 serialize.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.date.serialize");dojo.require("dojo.string.common");/* ISO 8601 Functions *********************/dojo.date.setIso8601 = function(/*Date*/dateObject, /*String*/formattedString){ // summary: sets a Date object based on an ISO 8601 formatted string (uses date and time) var comps = (formattedString.indexOf("T") == -1) ? formattedString.split(" ") : formattedString.split("T"); dateObject = dojo.date.setIso8601Date(dateObject, comps[0]); if(comps.length == 2){ dateObject = dojo.date.setIso8601Time(dateObject, comps[1]); } return dateObject; /* Date or null */};dojo.date.fromIso8601 = function(/*String*/formattedString){ // summary: returns a Date object based on an ISO 8601 formatted string (uses date and time) return dojo.date.setIso8601(new Date(0, 0), formattedString);};dojo.date.setIso8601Date = function(/*String*/dateObject, /*String*/formattedString){ // summary: sets a Date object based on an ISO 8601 formatted string (date only) var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" + "(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$"; var d = formattedString.match(new RegExp(regexp)); if(!d){ dojo.debug("invalid date string: " + formattedString); return null; // null } var year = d[1]; var month = d[4]; var date = d[6]; var dayofyear = d[8]; var week = d[10]; var dayofweek = d[12] ? d[12] : 1; dateObject.setFullYear(year); if(dayofyear){ dateObject.setMonth(0); dateObject.setDate(Number(dayofyear)); } else if(week){ dateObject.setMonth(0); dateObject.setDate(1); var gd = dateObject.getDay(); var day = gd ? gd : 7; var offset = Number(dayofweek) + (7 * Number(week)); if(day <= 4){ dateObject.setDate(offset + 1 - day); } else{ dateObject.setDate(offset + 8 - day); } } else{ if(month){ dateObject.setDate(1); dateObject.setMonth(month - 1); } if(date){ dateObject.setDate(date); } } return dateObject; // Date};dojo.date.fromIso8601Date = function(/*String*/formattedString){ // summary: returns a Date object based on an ISO 8601 formatted string (date only) return dojo.date.setIso8601Date(new Date(0, 0), formattedString);};dojo.date.setIso8601Time = function(/*Date*/dateObject, /*String*/formattedString){ // summary: sets a Date object based on an ISO 8601 formatted string (time only) // first strip timezone info from the end var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$"; var d = formattedString.match(new RegExp(timezone)); var offset = 0; // local time if no tz info if(d){ if(d[0] != 'Z'){ offset = (Number(d[3]) * 60) + Number(d[5]); offset *= ((d[2] == '-') ? 1 : -1); } offset -= dateObject.getTimezoneOffset(); formattedString = formattedString.substr(0, formattedString.length - d[0].length); } // then work out the time var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$"; d = formattedString.match(new RegExp(regexp)); if(!d){ dojo.debug("invalid time string: " + formattedString); return null; // null } var hours = d[1]; var mins = Number((d[3]) ? d[3] : 0); var secs = (d[5]) ? d[5] : 0; var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0; dateObject.setHours(hours); dateObject.setMinutes(mins); dateObject.setSeconds(secs); dateObject.setMilliseconds(ms); if(offset !== 0){ dateObject.setTime(dateObject.getTime() + offset * 60000); } return dateObject; // Date};dojo.date.fromIso8601Time = function(/*String*/formattedString){ // summary: returns a Date object based on an ISO 8601 formatted string (date only) return dojo.date.setIso8601Time(new Date(0, 0), formattedString);};/* RFC-3339 Date Functions *************************/dojo.date.toRfc3339 = function(/*Date?*/dateObject, /*String?*/selector){// summary:// Format a JavaScript Date object as a string according to RFC 3339//// dateObject:// A JavaScript date, or the current date and time, by default//// selector:// "dateOnly" or "timeOnly" to format selected portions of the Date object.// Date and time will be formatted by default.//FIXME: tolerate Number, string input? if(!dateObject){ dateObject = new Date(); } var _ = dojo.string.pad; var formattedDate = []; if(selector != "timeOnly"){ var date = [_(dateObject.getFullYear(),4), _(dateObject.getMonth()+1,2), _(dateObject.getDate(),2)].join('-'); formattedDate.push(date); } if(selector != "dateOnly"){ var time = [_(dateObject.getHours(),2), _(dateObject.getMinutes(),2), _(dateObject.getSeconds(),2)].join(':'); var timezoneOffset = dateObject.getTimezoneOffset(); time += (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(Math.abs(timezoneOffset)/60),2) + ":" + _(Math.abs(timezoneOffset)%60,2); formattedDate.push(time); } return formattedDate.join('T'); // String};dojo.date.fromRfc3339 = function(/*String*/rfcDate){// summary:// Create a JavaScript Date object from a string formatted according to RFC 3339//// rfcDate:// A string such as 2005-06-30T08:05:00-07:00// "any" is also supported in place of a time. // backwards compatible support for use of "any" instead of just not // including the time if(rfcDate.indexOf("Tany")!=-1){ rfcDate = rfcDate.replace("Tany",""); } var dateObject = new Date(); return dojo.date.setIso8601(dateObject, rfcDate); // Date or null};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -