කෙටි පිළිතුර
ජාවාස්ක්රිප්ට් සපුරාලන “විශ්වීය” ලියකියවිලි නොමැත; ජාවාස්ක්රිප්ට් ඇති සෑම බ්රව්සරයක්ම සැබවින්ම ක්රියාත්මක කිරීමකි. කෙසේ වෙතත්, බොහෝ නවීන බ්රව්සර් අනුගමනය කිරීමට නැඹුරු වන ප්රමිතියක් ඇත, එය EMCAScript ප්රමිතියයි; ECMAScript සම්මත නූල් අවම වශයෙන් ISO 8601 අර්ථ දැක්වීම නවීකරණය කිරීම අවශ්ය වේ.
මීට අමතරව, IETF විසින් ඉදිරිපත් කරන ලද දෙවන ප්රමිතිය ද ඇත බ්රවුසරයෙන් RFC සිදු 2822. සත ප්රලේඛනය පතුලේ ඇති යොමු ලැයිස්තුව සොයා ගත හැකි timestamps සඳහා අර්ථ දැක්වීම වන, මෙන්ම අනුගමනය කිරීමට නැඹුරු බව.
මෙයින් ඔබට මූලික ක්රියාකාරිත්වය අපේක්ෂා කළ හැකි නමුත් “විය යුතු” දේ සහජයෙන්ම “යනු කුමක්ද” යන්න නොවේ. ක්රියාපටිපාටිය අනුව මම මේ ගැන මඳක් ගැඹුරට යන්නෙමි. පෙනෙන ආකාරයට ඇත්ත වශයෙන්ම තිදෙනෙකු පමණක් ප්රශ්නයට පිළිතුරු දී ඇත (ස්කොට්, ගොෆ්බෝල් ලොජික් සහ පෙලර්), මට අනුව, ඔබ යෝජනා කරන විට ඇත්ත වශයෙන්ම සිදුවන්නේ කුමක්ද යන්න බොහෝ දෙනා නොදන්නා බව මට පෙනේ දින වස්තුවක් සාදන්න.
දිගු පිළිතුර
දිනය () වස්තුව මඟින් සහය දක්වන ආකෘති පිරිවිතරයන් ලැයිස්තුගත කරන ප්රලේඛනය කොහිද?
ප්රශ්නයට පිළිතුරු දීමට හෝ සාමාන්යයෙන් මෙම ප්රශ්නයට පිළිතුර සෙවීමට පවා ඔබ දැනගත යුත්තේ ජාවාස්ක්රිප්ට් නව භාෂාවක් නොවන බවයි; එය ඇත්ත වශයෙන්ම ECMAScript ක්රියාත්මක කිරීමක් වන අතර ECMAScript ප්රමිතීන් අනුගමනය කරයි (නමුත් සටහන, ජාවාස්ක්රිප්ට් ඇත්ත වශයෙන්ම එම ප්රමිතීන්ට පෙර දින නියම කර ඇත; EMCAScript ප්රමිතීන් ගොඩනඟා ඇත්තේ LiveScript / JavaScript හි මුල් ක්රියාත්මක කිරීමෙනි). වර්තමාන ECMAScript ප්රමිතිය 5.1 (2011); ප්රශ්නය මුලින් ඇසූ අවස්ථාවේ (ජූනි 09), ප්රමිතිය 3 (4 අතහැර දමා ඇත), නමුත් 5 ක් 2009 අවසානයේ තනතුරෙන් ටික කලකට පසුව මුදා හරින ලදි. මෙය එක් ගැටළුවක් ගෙනහැර දැක්විය යුතුය; ජාවාස්ක්රිප්ට් ක්රියාවට නැංවීම අනුගමනය කළ හැකි ප්රමිතිය, ඇත්ත වශයෙන්ම පවතින දේ පිළිබිඹු නොවිය හැකිය, මන්ද අ) එය ලබා දී ඇති ප්රමිතියක් ක්රියාත්මක කිරීම, ආ) ප්රමිතියක් ක්රියාත්මක කිරීම පියුරිටන් නොවේ,
අත්යවශ්යයෙන්ම, ජාවාස්ක්රිප්ට් සමඟ ගනුදෙනු කරන විට, ඔබ ක්රියාත්මක කරන්නේ ක්රියාවට නැංවීමේ ව්යුත්පන්නයක් (බ්රව්සරයට විශේෂිත වූ ජාවාස්ක්රිප්ට්) ය. ගූගල් හි V8, ECMAScript 5.0 ක්රියාත්මක කරයි, නමුත් ඉන්ටර්නෙට් එක්ස්ප්ලෝරර්ගේ JScript කිසිදු ECMAScript ප්රමිතියකට අනුකූල වීමට උත්සාහ නොකරයි, නමුත් Internet Explorer 9 ECMAScript 5.0 ට අනුකූල වේ.
එක් තර්කයක් නව දිනය () වෙත යොමු කළ විට, එය මෙම ශ්රිත මූලාකෘතිය දක්වයි:
new Date(value)
නව දිනය () වෙත තර්ක දෙකක් හෝ වැඩි ගණනක් සම්මත කළ විට, එය මෙම ශ්රිත මූලාකෘතිය දක්වයි:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
මෙම කාර්යයන් දෙකම හුරුපුරුදු විය යුතුය, නමුත් මෙය ඔබගේ ප්රශ්නයට ක්ෂණිකව පිළිතුරු නොදෙන අතර පිළිගත හැකි “දින ආකෘතියක්” ලෙස ප්රමාණාත්මක වන්නේ කුමක් ද යන්න තවදුරටත් පැහැදිලි කිරීම අවශ්ය වේ. ඔබ නව දිනයකට () නූලක් යවන විට, එය මූලාකෘතිය ලෙස හඳුන්වනු ඇත (මම මූලාකෘති යන වචනය ලිහිල් ලෙස භාවිතා කරන බව සලකන්න ; අනුවාදයන් තනි කාර්යයන් විය හැකිය, නැතහොත් එය එක් ශ්රිතයක කොන්දේසි සහිත ප්රකාශයක කොටසක් විය හැකිය) “අගය” පරාමිතිය සඳහා වන තර්කය ලෙස ඔබේ නූල් සමඟ නව දිනය (අගය) . මෙම ශ්රිතය මුලින්ම එය අංකයක් හෝ නූලක් දැයි පරීක්ෂා කරයි. මෙම කාර්යය සඳහා වන ලියකියවිලි මෙතැනින් සොයාගත හැකිය:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
මෙයින්, නව දිනය (අගය) සඳහා නූල් හැඩතල ගැන්වීම සඳහා අපට එය අනුමාන කළ හැකිය, අපි Date.parse (string) ක්රමය දෙස බැලිය යුතුය. මෙම ක්රමය සඳහා වන ලියකියවිලි මෙතැනින් සොයාගත හැකිය:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
මෙහි දක්වා ඇති පරිදි නවීකරණය කරන ලද ISO 8601 දීර් tend කරන ලද ආකෘතියක දිනයන් අපේක්ෂා කරන බව අපට තවදුරටත් අනුමාන කළ හැකිය:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
කෙසේ වෙතත්, ජාවාස්ක්රිප්ට්ගේ දිනය වස්තුව වෙනත් ආකෘතීන් පිළිගන්නා බව අපට අත්දැකීමෙන් හඳුනාගත හැකිය (මෙම ප්රශ්නයේ පැවැත්මෙන් මුලින් බලාත්මක වේ), සහ ECMAScript මඟින් විශේෂිත ආකෘතීන් ක්රියාත්මක කිරීමට ඉඩ ලබා දෙන බැවින් මෙය හරි ය. කෙසේ වෙතත්, පවතින ආකෘතීන්හි ඇති ලියකියවිලි මොනවාද, ඇත්ත වශයෙන්ම කුමන ආකෘතීන් සඳහා අවසර දී තිබේද යන ප්රශ්නයට එය තවමත් පිළිතුරු සපයන්නේ නැත. අපි ගූගල් හි ජාවාස්ක්රිප්ට් ක්රියාත්මක කිරීම දෙස බලමු, V8; කරුණාකර සටහන් කරන්න මෙය “හොඳම” ජාවාස්ක්රිප්ට් එන්ජිම (යමෙකුට “හොඳම” හෝ “හොඳ” යන්න නිර්වචනය කරන්නේ කෙසේද) සහ V8 හි අවසර දී ඇති ආකෘතීන් අද පවතින සියලුම ආකෘතීන් නියෝජනය කරයි යැයි කෙනෙකුට සිතිය නොහැකිය, නමුත් එය සාධාරණ යැයි මම සිතමි ඔවුන් නවීන අපේක්ෂාවන් අනුගමනය කරයි යැයි උපකල්පනය කිරීම.
ගූගල් හි V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
DateConstructor ශ්රිතය දෙස බලන විට, අපට DateParse ශ්රිතය සොයා ගැනීමට අවශ්ය යැයි අනුමාන කළ හැකිය; කෙසේ වෙතත්, “වර්ෂය” යනු සත්ය වර්ෂය නොවන අතර එය “වර්ෂය” පරාමිතියට යොමු කිරීමක් පමණක් බව සලකන්න.
ගූගල් හි V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
මෙය% DateParseString ලෙස හැඳින්වේ, එය ඇත්ත වශයෙන්ම C ++ ශ්රිතයක් සඳහා ධාවන කාල ශ්රිත යොමුවකි. එය පහත කේතය වෙත යොමු වේ:
ගූගල් හි V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
මෙම ශ්රිතයේ අප සැලකිලිමත් වන ශ්රිත ඇමතුම ඩේට්පාර්සර් :: විග්රහය (); එම ශ්රිත ඇමතුම් අවට ඇති තර්කනය නොසලකා හරින්න, මේවා කේතීකරණ වර්ගයට (ASCII සහ UC16) අනුකූල වන චෙක්පත් පමණි. DateParser :: විග්රහය මෙහි අර්ථ දක්වා ඇත:
ගූගල් හි V8, dateparser-inl.h, DateParser :: විග්රහ කරන්න
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
මෙය පිළිගන්නේ කුමන ආකෘතීන් ද යන්න නිර්වචනය කරන ශ්රිතයයි. අත්යවශ්යයෙන්ම, එය EMCAScript 5.0 ISO 8601 ප්රමිතිය සඳහා පරික්ෂා කරන අතර එය ප්රමිතීන්ට අනුකූල නොවේ නම්, එය පැරණි ආකෘතීන් මත පදනම්ව දිනය ගොඩනැගීමට උත්සාහ කරනු ඇත. අදහස් මත පදනම් වූ ප්රධාන කරුණු කිහිපයක්:
- විග්රහ කරන්නා නොදන්නා පළමු අංකයට පෙර වචන නොසලකා හරිනු ලැබේ.
- වරහන් කළ පෙළ නොසලකා හරිනු ලැබේ.
- “:” ට පසුව අත්සන් නොකළ අංක “කාල සංරචකයක්” ලෙස අර්ථ දැක්වේ.
- අත්සන් නොකළ අංක ඉන්පසු “.” “කාල සංරචකයක්” ලෙස අර්ථකථනය කර ඇති අතර එය අනුගමනය කළ යුත්තේ මිලි තත්පර.
- පැය හෝ පැයේ මිනිත්තුවෙන් පසුව අත්සන් කළ අංක (උදා: +5: 15 හෝ +0515) කාල කලාපය ලෙස අර්ථ දැක්වේ.
- පැය සහ මිනිත්තුව ප්රකාශ කරන විට, ඔබට “hh: mm” හෝ “hhmm” භාවිතා කළ හැකිය.
- කාල කලාපයක් දැක්වෙන වචන කාල කලාපයක් ලෙස අර්ථ දැක්වේ.
- අනෙක් සියලුම සංඛ්යා “දිනය සංරචක” ලෙස අර්ථ දැක්වේ.
- මසක පළමු ඉලක්කම් තුනෙන් ආරම්භ වන සියලුම වචන මාසය ලෙස අර්ථ දැක්වේ.
- “Hh: mm” හෝ “hhmm” යන ආකෘති දෙකෙන් ඔබට මිනිත්තු සහ පැය එකට අර්ථ දැක්විය හැකිය.
- අංකයක් සැකසූ පසු “+”, “-“ සහ අසමසම “)” වැනි සංකේත වලට අවසර නැත.
- බහුවිධ හැඩතලවලට ගැලපෙන අයිතම (උදා: 1970-01-01) සම්මත අනුකූල EMCAScript 5.0 ISO 8601 නූලක් ලෙස සකසනු ලැබේ.
එබැවින් දිනය වස්තුවකට නූලක් යැවීමේදී අපේක්ෂා කළ යුතු දේ පිළිබඳ මූලික අදහසක් ලබා දීමට මෙය ප්රමාණවත් විය යුතුය. මොසිල්ලා සංවර්ධක ජාලයට (IETF RFC 2822 කාලරාමුවලට අනුකූලව) මොසිල්ලා පෙන්වා දෙන පහත පිරිවිතර දෙස බැලීමෙන් ඔබට මෙය තවදුරටත් පුළුල් කළ හැකිය:
http://tools.ietf.org/html/rfc2822#page-14
මයික්රොසොෆ්ට් සංවර්ධක ජාලය දින වස්තුව සඳහා අතිරේක ප්රමිතියක් ගැන සඳහන් කරයි: ECMA-402, ECMAScript ජාත්යන්තරකරණ API පිරිවිතර, එය ECMAScript 5.1 ප්රමිතියට (සහ අනාගත ඒවාට) අනුපූරක වේ. එය මෙහි සොයාගත හැකිය:
http://www.ecma-international.org/ecma-402/1.0/
කෙසේ වෙතත්, මෙය ජාවාස්ක්රිප්ට් හි සියලු ක්රියාත්මක කිරීම් විශ්වීයව නිරූපණය කරන “ලියකියවිලි” නොමැති බව ඉස්මතු කිරීමට උපකාරී වේ, නමුත් දිනය වස්තුවක් සඳහා පිළිගත හැකි නූල් මොනවාද යන්න පිළිබඳව සාධාරණ අවබෝධයක් ලබා ගැනීම සඳහා ප්රමාණවත් ලියකියවිලි තවමත් තිබේ. ඔබ ඒ ගැන සිතන විට පටවා ඇති ප්රශ්නය, ඔව්? : පී
යොමුව
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ecma-international.org/ecma-402/1.0/
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
සම්පත්
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx