生成日歷中任意一個(gè)月的日期數(shù)組,并按星期排列
使用 JavaScript 的 Date 對象和一些日期處理方法。
以下是一個(gè)示例代碼,演示如何生成指定月份的日期數(shù)組,并按星期排列:
// 計(jì)算函數(shù)
function generateCalendar(year, month) {
var startDate=new Date(year, month - 1, 1); // 設(shè)置為指定年份和月份的第一天
var endDate=new Date(year, month, 0); // 設(shè)置為指定年份和月份的最后一天
var dates=[];
var currentDate=startDate;
// 添加空白日期,以使第一天對應(yīng)正確的星期
for (var i=0; i < startDate.getDay(); i++) {
dates.push(null);
}
while (currentDate <=endDate) {
dates.push(currentDate.getDate());
currentDate.setDate(currentDate.getDate() + 1);
}
// 添加空白日期,以使最后一天對應(yīng)正確的星期
for (var i=endDate.getDay(); i < 6; i++) {
dates.push(null);
}
// 將日期數(shù)組按星期排列
var weeks=[];
var week=[];
dates.forEach(function(date) {
week.push(date);
if (week.length===7) {
weeks.push(week);
week=[];
}
});
return weeks;
}
// 用法使用示例
var year=2023;
var month=8;
var weeksArray=generateCalendar(year, month);
console.log(weeksArray);
在這個(gè)示例中,我們首先定義了一個(gè)名為 generateCalendar 的函數(shù),它接受年份和月份作為參數(shù)。我們使用 new Date(year, month - 1, 1) 來創(chuàng)建一個(gè)表示指定年份和月份第一天的 Date 對象,并使用 new Date(year, month, 0) 來創(chuàng)建一個(gè)表示指定年份和月份最后一天的 Date 對象。
然后,我們使用一個(gè)循環(huán)來添加空白日期,以使第一天對應(yīng)正確的星期。我們使用 startDate.getDay() 來獲取第一天的星期幾,并使用一個(gè)循環(huán)將 null 值添加到日期數(shù)組中。
接下來,我們使用另一個(gè)循環(huán)來遍歷從第一天到最后一天的日期,并將每個(gè)日期的日期部分添加到日期數(shù)組中。
然后,我們再次使用一個(gè)循環(huán)來添加空白日期,以使最后一天對應(yīng)正確的星期。我們使用 endDate.getDay() 來獲取最后一天的星期幾,并使用一個(gè)循環(huán)將 null 值添加到日期數(shù)組中。
最后,我們將日期數(shù)組按星期排列。我們創(chuàng)建一個(gè)空數(shù)組 weeks 和一個(gè)臨時(shí)數(shù)組 week,然后使用 forEach 方法遍歷日期數(shù)組。我們將每個(gè)日期添加到 week 數(shù)組中,并在 week 數(shù)組長度達(dá)到 7 時(shí),將其添加到 weeks 數(shù)組中,并重置 week 數(shù)組。
最終,我們返回按星期排列的日期數(shù)組,并在示例用法中打印出來。
注意:這里的星期是按照周日開始的
odejs支持js代碼跑在后端服務(wù)器上。
版本主要用的還是5.1和6.0版本。
有兩種引入方式:
1.script標(biāo)簽內(nèi)部直接書寫js代碼
2.script標(biāo)簽src屬性引入外部js代碼
//單行注釋
/*多行注釋*/
js語句以;作為語句的結(jié)束,但不寫也沒關(guān)系。
js中首次定義一個(gè)變量名的時(shí)候,需要用關(guān)鍵字聲明
1、關(guān)鍵字var
var name='jason'
2、es6推出的新語法let
let name='jason'
如果你的編輯器支持的版本是5.1,那么無法使用let
const 用來定義常量
var與let的區(qū)別:
1、作用域:使用"var"聲明的變量在整個(gè)函數(shù)范圍內(nèi)都是可訪問的(函數(shù)作用域),而使用"let"聲明的變量則是塊級作用域的(塊級作用域是指由一對花括號包圍的代碼塊)。
2、變量提升:使用"var"聲明的變量會發(fā)生變量提升,意味著變量可以在其聲明之前被訪問。而使用"let"聲明的變量不會發(fā)生變量提升,只有在變量聲明的位置之后才能訪問到。
3、重復(fù)聲明:使用"var"重復(fù)聲明同一個(gè)變量是允許的,而使用"let"重復(fù)聲明同一個(gè)變量則會引發(fā)錯(cuò)誤。
4、循環(huán)中的區(qū)別:在使用"var"聲明的變量在循環(huán)中具有全局作用域,而使用"let"聲明的變量在循環(huán)中具有塊級作用域。這意味著使用"let"聲明的變量在每次循環(huán)迭代時(shí)都會重新創(chuàng)建,避免了一些常見的循環(huán)中的問題。
總結(jié)起來,"var"適用于函數(shù)作用域的變量聲明,而"let"適用于塊級作用域的變量聲明。在現(xiàn)代的JavaScript開發(fā)中,推薦使用"let"來聲明變量,因?yàn)樗峁┝烁玫淖饔糜蚩刂坪透鞔_的變量聲明方式。
var
let
1.變量名只能是:數(shù)字、字母、下戶線和$
2.變量名命名規(guī)范:js中推薦使用駝峰式命名。如:userName
3.不能用關(guān)鍵字命名
1.可以單獨(dú)開設(shè)js文件書寫
2.可以在瀏覽器的console界面書寫,在瀏覽器書寫js的時(shí)候,左上方的清空按鈕只是清空內(nèi)容,代碼其實(shí)還在。如果想重新來,最好重新開設(shè)一個(gè)頁面(在使用瀏覽器寫js代碼的話最好是在自己的html界面書寫)
JavaScript是一種動態(tài)類型語言。動態(tài)類型語言是指在運(yùn)行時(shí)確定變量類型的語言。相對于靜態(tài)類型語言(如Java、C++),在JavaScript中,變量的類型是在運(yùn)行時(shí)根據(jù)賦值的值來確定的,而不是在編譯時(shí)確定的。
數(shù)值類型(number):
var a=11
var b=11.11
typeof a //查看數(shù)據(jù)類型
js中浮點(diǎn)數(shù)和整數(shù)都是number類型
特殊的數(shù)值類型:NaN也是一種number,但他表示的意思是“不是一個(gè)數(shù)值”not a number。
parseInt('') //轉(zhuǎn)為整形
parseFloat('') //轉(zhuǎn)為浮點(diǎn)數(shù)
當(dāng)浮點(diǎn)數(shù)轉(zhuǎn)為整形時(shí),會自動去除后面的小數(shù)點(diǎn)。
字符類型(string):
var name='name' //字符串
var str=` //模板字符串
asdasd
asdasd
`
// 模版字符串除了可以定義多行文本之外還可以實(shí)現(xiàn)格式化字符串操作
// 書寫${}會自動去前面找大括號里面的變量名對應(yīng)的值,如果沒有定義直接報(bào)錯(cuò)
var sss=`my name is ${name}` //類似于python里的占位符
// 字符串的拼接
// 在python中不推薦你使用+做拼接 join// 在js中推薦你直接使用+做拼接
name + age
字符串的內(nèi)置方法:
1.在python中布爾值是首字母大寫的
True
False
2.但是在js中布爾值是全小寫的
true
false
# 布爾值是false的有哪些
空字符串、0、null、undefined、NaN
nul1
表示值為空一般都是指定或者清空一個(gè)變量時(shí)使用
name=‘jason’
name=null
undefined
表示聲明了一個(gè)變量,但是沒有做初始化操作(沒有給值)。
函數(shù)沒有指定返回值的時(shí)候,返回的也是undefined
在js中數(shù)組用[]表示。(和python里的列表一樣,但不支持負(fù)數(shù)索引。)
內(nèi)置方法:
基本函數(shù)
forEach函數(shù)
splice函數(shù)
map函數(shù),效果和forEach差不多
自定義對象:
在js中自定義對象用{}表示,類似于python中的字典。
第二種創(chuàng)建自定義對象的方式
用于創(chuàng)建時(shí)間對象
json對象
re對象
全局匹配需要注意的地方(1)
在第一次全局匹配后,指針會落到字符串的末尾處。然后下一次匹配開始時(shí),會直接從末尾處開始匹配,匹配不到內(nèi)容,則會輸出false,然后再將指針移動到開頭。
lastindex屬性驗(yàn)證
全局匹配需要注意的地方(2)
如果被匹配的對象里面什么也沒有,那么會自動傳一個(gè)undefined。
自增
比較運(yùn)算符(大于等于也是一樣操作的)
邏輯運(yùn)算符
if判斷
switch語法
switch語法
for循環(huán)
while循環(huán)、三元運(yùn)算符
有參函數(shù),參數(shù)傳多了或傳少了都不會報(bào)錯(cuò)
可以使用arguments關(guān)鍵字來控制傳參
函數(shù)的返回值
匿名函數(shù)
箭頭函數(shù)
作用域(查找變量的優(yōu)先級順序)
作用域(查找變量的優(yōu)先級順序)
頭條創(chuàng)作挑戰(zhàn)賽# HTMLDocument對象是Microsoft Excel VBA中表示HTML文檔的一種對象。它可以用于讀取、修改和操作HTML文檔中的標(biāo)簽、元素和屬性??梢酝ㄟ^創(chuàng)建HTMLDocument對象來加載和解析HTML文件,并使用提供的方法和屬性訪問文檔中的各個(gè)部分。可以將HTMLDocument對象與其他Excel對象(如Workbooks、Worksheets或Range)一起使用,以便在VBA中自動化對HTML文檔的處理和操作。
1、創(chuàng)建HTMLDocument對象并加載HTML文件:
Dim htmlDoc As New HTMLDocument
htmlDoc.body.innerHTML="HTML內(nèi)容"
2、通過標(biāo)簽名稱獲取元素對象:
Dim element As Object
Set element=htmlDoc.getElementsByTagName("h1")(0)
3、獲取元素的文本內(nèi)容:
Dim text As String
text=htmlDoc.getElementById("myElement").innerText
4、修改元素的屬性值:
htmlDoc.getElementById("myElement").setAttribute "class", "newClass"
5、遍歷所有元素并執(zhí)行操作:
Dim allElements As Object
Set allElements=htmlDoc.getElementsByTagName("*")
For Each element In allElements
' 執(zhí)行操作
Next element
6、在HTML文檔中插入新元素:
Dim newElement As Object
Set newElement=htmlDoc.createElement("p")
newElement.innerHTML="新段落"
htmlDoc.body.appendChild newElement
以下是兩個(gè)在Excel VBA中使用HTMLDocument對象的示例:
案例一:從網(wǎng)頁中提取數(shù)據(jù)并填充至Excel工作表
Sub ExtractDataFromWeb()
Dim html As New HTMLDocument ' 創(chuàng)建HTMLDocument對象
Dim xmlhttp As Object
Dim table As Object
Dim i As Integer, j As Integer
' 創(chuàng)建XMLHTTP對象
Set xmlhttp=CreateObject("MSXML2.XMLHTTP")
' 發(fā)送GET請求獲取網(wǎng)頁內(nèi)容
xmlhttp.Open "GET", "http://www.example.com", False
xmlhttp.send
' 將獲取的網(wǎng)頁內(nèi)容解析到HTMLDocument對象
html.body.innerHTML=xmlhttp.responseText
' 在HTMLDocument對象中查找需要提取的表格
Set table=html.getElementById("tableId")
' 填充數(shù)據(jù)至Excel工作表
For i=0 To table.Rows.Length - 1
For j=0 To table.Rows(i).Cells.Length - 1
ThisWorkbook.Sheets("Sheet1").Cells(i + 1, j + 1)=table.Rows(i).Cells(j).innerText
Next j
Next i
Set xmlhttp=Nothing
Set html=Nothing
End Sub
案例二:自動化提交表單并獲取返回結(jié)果
Sub SubmitFormAndGetResponse()
Dim html As New HTMLDocument ' 創(chuàng)建HTMLDocument對象
Dim xmlhttp As Object
Dim form As Object
Dim submitButton As Object
' 創(chuàng)建XMLHTTP對象
Set xmlhttp=CreateObject("MSXML2.XMLHTTP")
' 發(fā)送GET請求獲取包含表單的網(wǎng)頁內(nèi)容
xmlhttp.Open "GET", "http://www.example.com/form-page", False
xmlhttp.send
' 將獲取的網(wǎng)頁內(nèi)容解析到HTMLDocument對象
html.body.innerHTML=xmlhttp.responseText
' 在HTMLDocument對象中查找表單并填寫表單字段
Set form=html.forms(0)
form.getElementById("inputField1").Value="Value1"
form.getElementById("inputField2").Value="Value2"
' 找到提交按鈕并自動點(diǎn)擊
Set submitButton=form.getElementsByClassName("submitButton")(0)
submitButton.Click
' 等待結(jié)果返回并解析結(jié)果
Application.Wait Now + TimeValue("0:00:02") ' 等待2秒,根據(jù)實(shí)際情況調(diào)整等待時(shí)間
html.body.innerHTML=xmlhttp.responseText
' 處理返回結(jié)果
' ...
Set xmlhttp=Nothing
Set html=Nothing
End Sub
這些示例演示了如何使用HTMLDocument對象從網(wǎng)頁中提取數(shù)據(jù)并將其填充至Excel工作表,以及如何自動化提交HTML表單并獲取返回結(jié)果。可以根據(jù)需要修改代碼中的URL、元素ID和類名等,以適應(yīng)具體的網(wǎng)頁結(jié)構(gòu)和目標(biāo)數(shù)據(jù)。
使用HTMLDocument對象時(shí)需要注意以下事項(xiàng):
1、引用Microsoft HTML Object Library:在VBA編輯器中,點(diǎn)擊菜單欄上的"工具",選擇"引用",然后勾選"Microsoft HTML Object Library"。這個(gè)引用將允許你在VBA代碼中使用HTMLDocument對象。
2、創(chuàng)建HTMLDocument對象:使用CreateObject函數(shù)創(chuàng)建HTMLDocument對象。例如:
Dim html As Object
Set html=CreateObject("HTMLFile")
3、加載HTML內(nèi)容:使用HTMLDocument對象的Open方法加載HTML內(nèi)容。例如:
html.Open
html.Write "<html><body><h1>Hello, World!</h1></body></html>"
html.Close
4、獲取HTML元素:可以使用getElementById、getElementsByTagName、getElementsByClassName等方法獲取HTML元素。例如:
Dim h1 As Object
Set h1=html.getElementById("myHeading")
5、操作HTML元素:可以使用HTML元素的屬性和方法進(jìn)行操作。例如,改變元素的文本內(nèi)容:
h1.innerText="Hello, VBA!"
6、事件處理:HTMLDocument對象也支持事件處理??梢允褂肁ttachEvent方法將事件與處理程序關(guān)聯(lián)起來。例如:
Dim button As Object
Set button=html.getElementById("myButton")
Private Function Button_Click()
MsgBox "Button clicked!"
End Function
button.AttachEvent "onclick", Button_Click
7、釋放資源:在使用完HTMLDocument對象后,記得使用Set語句將其設(shè)置為Nothing,以釋放系統(tǒng)資源。例如:
Set h1=Nothing
Set html=Nothing
以上是使用HTMLDocument對象時(shí)需要注意的一些事項(xiàng)。通過合適的引用和正確的操作,可以在VBA編寫中使用HTMLDocument對象來處理HTML內(nèi)容。
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。