JavaScript获取昨天、今天、明天的时间

本文的标题是比较实例化的,我们抽象点说就是如何获取基于今天的一个日期,像PHP里面有如下的方式:

echo "明天:",date("Y-m-d",strtotime("+1 day")), "<br>";

JavaScript里面该怎么做一个类似的实现呢?下面是简单的实现:

function getDateStr(count)
{
    var date = new Date();
    date.setDate(dd.getDate() + count);
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();
    return year + "-" + month + "-" + day;
}

昨天就是getDateStr(-1)

今天就是getDateStr(0)

明天就是getDateStr(1)

那么前天、后天都可以以此类推。

修改Linux服务器时间测试crontab

最近在公司做的一个应用,有跟时间有关的逻辑,测试人员需要对这个逻辑进行测试,需要修改Linux服务器的时间,开始的时候,我们使用:

[root@web_test www]# date -s '2013-08-26 9:59'

来修改系统的时间,输入date之后也看到了时间确实被改了,于是我们在等待crontab自动执行10点钟的定时脚本,时间到了之后,我们查看脚本的输出日志,日志的时间或者是日志根本不存在,也就是说脚本根本就没有本执行(我们的脚本手动执行是不会有问题的)。为了排查问题,我们把crontab的中的脚本原来定在10点钟跑的改成了每分钟都会跑,结果是它成功执行了,那么这就说明我们的crontab本身是没有问题的,问题就出在系统时间上了!

查阅了相关的资料发现:在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS!这就是为什么我们的脚本不执行的问题的原因了。如果要确保修改生效要执行如下命令:

[root@web_test www]# clock -w

修改了系统时间之后再输入clock -w就可以将系统时间写入CMOS,然后我们的crontab定时脚本就跑起来了!

诶,等一下,那我们改了系统的时间怎么把系统的时间还原成现实中的时间呢?不要看着你的手表手动输入,要那种很准确的时间?

我们要做的就是寻找一个网络时间服务器,比如一些国家授时中心,我查了有这些:

微软公司授时主机(美国)
time.windows.com
台警大授时中心(台湾)
asia.pool.ntp.org
中科院授时中心(西安)
210.72.145.44
网通授时中心(北京)
219.158.14.130

我们只要运行:

[root@web_test www]# ntpdate asia.pool.ntp.org

然后再输入clock -w就手动将系统时间写入CMOS,就OK啦!

PragPro的哲学(之二)

2.软件的熵

熵是一个物理学术语,指的是一个系统中“混乱”的数量。不幸的是,热力学的定律保证在宇宙中熵趋向于无穷大。在软件中混乱增多的时候,程序员们管它叫做“软件腐烂”。

在内地的城市,一些建筑都很漂亮和干净,然而其他的都很挫。为什么呢?犯罪和城市领域的研究人员发现非常神奇的让一个干净、完整、有人居住的建筑变成乱七八糟遭人唾弃的鬼地方的触发机制。

一个破碎的窗户

一个破碎的窗户放着很久没有去修理,慢慢地,这栋楼的居民心中会产生抛弃感,这种感觉使得他们根本会在乎这栋楼。所以其他的窗户打坏了,人们开始把它丢在一边不管。渐渐地涂鸦出现了,建筑结构上严重的破坏也产生了。在相当短的时间里,这栋楼变得非常破旧搞得居民都不像去修理它,并且人们抛弃它成为了现实。

“破窗原理”给纽约和其他主要城市的警察局带来了灵感,他们用小事情来阻止大事情。这发挥了作用:保持破窗、涂鸦和不足挂齿的违规行为减少了严重的犯罪水平。

建议4

不要和破窗一起生活

不要遗留没有被修理的“破窗”(差劲的设计、错误的决定或者垃圾的代码)。以上任何一个问题被发现的时候就得去修复它。如果没有足够的时间去适当的处理它,那就把这个错误封闭起来。也许你可以把不好的代码注释起来,或者显示一个“未完成”这样的信息,或者用虚拟的数据代替。要采取行动来阻止更进一步的破坏以及表现出你是在最高状态。

你可能会想没有人有时间去把一个项目里所有的玻璃碎片都弄干净。如果你继续这样想的话,你最好还是去弄个大的垃圾桶过来,或者搬到另一个街坊。不要让熵赢了。

Linux查看系统时间和日期命令date

为了查看系统的时间和日期,你可以输入date:
[root@localhost ~]# date
2012年 09月 10日 星期一 23:48:08 CST
你还可以输入一下的命令来显示UTC时间即格林尼治时间:
[root@localhost src]# date -u
2012年 09月 10日 星期一 16:06:48 UTC
Linux下还有一个time命令,这个命令并不是显示时间的,它是用来测量程序运行时间的,具体可以阅读http://www.tonitech.com/?p=884 。

利用迪杰斯特拉算法计算最快时间

如果有一个问题,有一张公交车时刻表:

8

Burnie

Deloraine

Devonport

Hobart

Launceston

Oatlands

Queenstown

Swansea

54

0

2 800 845

0 2 1100 1145

0 2 1400 1445

0 2 1700 1745

0 6 800

1100

0 6 1400 1700

1 2 900 945

1 2 1200 1245

1 2 1500 1545

1 2

1800 1845

1 4 1000 1045

1 4 1300 1345

1 4 1600 1645

1 4 1900

1945

2 0 1000 1045

2 0 1300 1345

2 0 1600 1645

2 0 1900 1945

2 1

900 945

2 1 1200 1245

2 1 1500 1545

2 1 1800 1845

3 5 800 900

3 5

1100 1200

3 5 1400 1500

3 5 1700 1800

3 6 900 1400

3 6 1500

2000

4 1 800 845

4 1 1100 1145

4 1 1400 1445

4 1 1700 1745

4 5

800 930

4 5 1100 1230

4 5 1400 1530

4 5 1700 1830

5 3 930 1030

5

3 1230 1330

5 3 1530 1630

5 3 1830 1930

5 4 900 1030

5 4 1200

1330

5 4 1500 1630

5 4 1800 1930

5 7 800 900

5 7 1200 1300

5 7

1600 1700

6 0 1100 1400

6 0 1700 2000

6 3 900 1400

6 3 1500

2000

7 5 900 1000

7 5 1300 1400

7 5 1700 1800

第一个数字代表开始出发的城镇,第二个代表目的地城镇,第三个代表出发时间,第四个代表到达时间。

如果一个城镇到另外一个城镇没有直达车的话,只能选择转车了,要计算出转车的最快时间和路径。

以下是本人编写的代码来实现这个问题,编译器是Visual Studio

2010,已经有town,map,list,bus几个类了。

#include "dijkstra.h"

dijkstra::dijkstra()
{
 departure_tn=NULL;
 m=NULL;
}

dijkstra::dijkstra(town* departure_town,map* mp,list* l)
{
 departure_tn=new town();
 m=new map();
 ls=new list();

 departure_tn=departure_town;
 m=mp;
 ls=l;
}

dijkstra::~dijkstra()
{
 if (departure_tn!=NULL)
 {
  delete departure_tn;
 }

 if (m!=NULL)
 {
  delete m;
 }
}


int dijkstra::get_earliest_arrival_times(int start_time,int departure_town_num,int destination_town_num)
{
 int elst,earliest_times,check=1,min;
 int dep=departure_town_num;
 
 for(int i=0;i<8;i++)
 {
  earliest[i]=10000;
  known[i]=0;
  path[i]=0;
 }

 earliest[dep]=start_time;  //set the shortest arrival time
 elst=dep;
 earliest_times=start_time;

 for(;;)
 {  
  check=1;
  
     min=10000;
  for(int i=0;i<8;i++)
  {
   if(known[i]==0)
   {
    if(min>=earliest[i])
    {
     min=earliest[i];
     elst=i;
    }
   }
  }

  
  for(int i=0;i<8;i++)
  {
   if(known[i]==0)
   {
    check=0;
   }
  }
  if(check)
   break;
   
  
  known[elst]=1;

  for(int i=0;i<8;i++)
  {
   if(strcmp(ls->get_next_direct_bus(earliest[elst],elst,i),"-1")) //if it can get to the vertex directly
   {  
    if(known[i]==0)
    {
     if(atoi(ls->get_next_direct_bus(earliest[elst],elst,i))<earliest[i])
     {
      earliest[i]=atoi(ls->get_next_direct_bus(earliest[elst],elst,i));  //get the earliest arrival time
      path[i]=elst;
     }
    }
   }
  }
 }
 
 if(earliest[destination_town_num]==10000)
 {
  available=0;
  return 0;
 }
 else
 {
  available=1;
  return earliest[destination_town_num];
 }
}


void dijkstra::print_path(int departure_town_num,int destination_town_num)
{
 if(available==0)
  return;
 char* nm1;
 char* nm2;
 nm1=new char[10];
 nm2=new char[10];
 int d=departure_town_num;
 int des=destination_town_num;

 
 if(des!=d)
 {   
  print_path(d,path[des]);

  
  cout<<m->get_towns(path[des])->get_town_name();
  nm1=m->get_towns(path[des])->get_town_name();
  for(int i=0;i<(12-strlen(nm1));i++)
  {
   cout<<" ";
  }

  cout<<m->get_towns(des)->get_town_name();
  nm2=m->get_towns(des)->get_town_name();
  for(int i=0;i<(12-strlen(nm2));i++)
  {
   cout<<" ";
  }
  cout<<ls->get_start_times(earliest[des],path[des],des)<<"  ";
  cout<<ls->get_next_direct_bus(earliest[path[des]],path[des],des)<<endl;
 }
}

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=414