编程经验:javascript字符串转换时间格式

 

<script language="javascript" type="text/javascript">

function DisplayTime()  

{  

    var timeSum=document.getElementById("txtTimeSum").value;

    var startTime=document.getElementById("txtStaDate").value;

    var tStaDate=startTime.toString().split(/[-\s:]/); //字符串转时间

     var nowTime=new Date();

    for(var i=0;i<tStaDate.length;i++)

    {

        if (isNaN(tStaDate[i])) {//非数字  false

          nowTime=new Date();

          document.getElementById("txtStaDate").innerText=setTime(nowTime,0);

          break;

        }

        else

        {//数字 true

         // nowTime=new Date(Date.apply(null, tStaDate));

       nowTime= eval('new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a){ return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'); //火星文看不懂

         // nowTime=new //Date(tStaDate[0],tStaDate[1]-1,tStaDate[2],tStaDate[3],tStaDate[4],tStaDate[5]);

        }

    }

    document.getElementById("txtEndDate").innerText=setTime(nowTime,timeSum);

 

 function setTime(nowTime,timeSum)  

{

    var timget=nowTime.getTime();

    var endTime=timget+(60*60*1000*(timeSum));

    var gEndTime= new Date(endTime);

    var tYear=gEndTime.getYear();

    var tMonth=gEndTime.getMonth()+1;

    var tDay=gEndTime.getDate();

    var tHour=gEndTime.getHours();

    var tMinutes=gEndTime.getMinutes();

    var tSencond=gEndTime.getSeconds();

    var clock =tYear+"-";

    if (tMonth<10) clock += '0'; //字符串

    clock += tMonth+'-'

    if (tDay<10) clock += '0'; //字符串

clock += tDay+' '

 

     if (tHour<10) clock += '0'; //字符串

    clock += tHour+':'

    if (tMinutes<10) clock += '0'; //字符串

    clock += tMinutes+':';

    if (tSencond<10) clock += '0'; //字符串

    clock += tSencond;

    return clock;

}

</script>

 

<td>开始时间<span class="spanARed">*</span></td>

<td><asp:TextBox ID="txtStaDate" MaxLength="20" CssClass="TextBoxB" runat="server" onblur="DisplayTime()" /></td>

<td>结束时间<span class="spanARed">*</span></td>

<td>

<asp:TextBox ID="txtEndDate" MaxLength="20" CssClass="TextBoxB" runat="server">

</asp:TextBox></td>

<td>项目用时<span class="spanARed">*</span></td>

<td><asp:TextBox ID="txtTimeSum" MaxLength="5" CssClass="TextBoxB" Style="width: 220px;"

onblur="DisplayTime()" runat="server"></asp:TextBox>小时</td>

Debugger调试结果已经分析

 

nowTime= eval('new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a){ return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');

来看看这段关键代码(火星文哦~~),我来分割下:

startTime.toString()

.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; })    

.match(/\d+/g)

 

已知:

startTime="2009-10-16 10:37:48";

nowTime={new(Fri Oct 16 10:37:48 UTC+0800 2009)};

 

调试的结果:

 startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; })="2009-9-16 10:37:48";

 

 startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g)={"2009","9","16","10","37","48",16,"2009-9-16 10:37:48",18}  //后三位index input lastIndex

 

'new Date(' + startTime.toString().replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'="new Date(2009,9,16,10,37,48)";

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

必备知识:

 

+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

 

下面,就让我们来看一下正则表达式元字符的具体应用。

 

/fo+/  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的fool, fo, 或者football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

 

/eg*/  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的easy, ego, 或者egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

 

/Wil?/  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的Win, 或者“Wilson,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

 

 \s:用于匹配单个空格符,包括tab键和换行符;

 \S:用于匹配除单个空格符之外的所有字符;

 \d:用于匹配从09的数字;

 \w:用于匹配字母,数字或下划线字符;

 \W:用于匹配所有与\w不匹配的字符;

 . :用于匹配除换行符之外的所有字符。

  较为常用的定位符包括:^, $, \b以及\B”。

  ^”定位符规定匹配模式必须出现在目标字符串的开头

  $”定位符规定匹配模式必须出现在目标对象的结尾

  \b”定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一

  \B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。

 

   /^hell/ 因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以hell, hello”或“hellhound”开头的字符串相匹配。

   /ar$/ 因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以car, bar”或ar结尾的字符串相匹配。

   /\bbom/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以bomb, bom”开头的字符串相匹配。

   /man\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以human, woman”或man”结尾的字符串相匹配。

转载于:https://www.cnblogs.com/Gemgin/archive/2013/06/13/3136329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值