2012-08-02 112 views
1

我决定让用户输入DDMMYYY来获得他们的生日。如何从这些数据在JavaScript中创建UNIX时间戳?JavaScript从DDMMYYYY做出时间?

另外,一旦我有unix时间戳,我该如何显示它英语,即2000年1月5日星期一?

我可以很容易地做到这一点,我只是不知道在JavaScript中的功能。

回答

-1

Date.js是一个伟大的第三方库,将允许您分析用户输入的任何格式,像这样:

没有分隔符,它可能会有点棘手做到这一点。如果你愿意来提取日,月和年Date.js提供其优雅:

var dl = new Date(2007, 0, 1); 
var unixTimeStamp = dl.valueOf()/1000; 
var customDateString = dl.toString('dddd dd MMM yyyy'); 

看到它在行动here

+0

Date.js已经维持了5年。这是错误的,并覆盖了很多原生的'Date.prototype'方法,这使得在生产中使用它很危险。 – timrwood 2012-08-04 00:14:05

+0

Date.js有**糟糕的**设计问题,如上所述,并且没有形成。此外,不鼓励多个'var'语句。 – WhyNotHugo 2012-08-04 00:21:29

0

您可以使用子字符串来获取Day,Month和Year,然后在javascript中创建一个新的Date对象: var ux = new Date(year,month,day).getMilliseconds/1000;

1

这对于输入DDMMYYYY将会很棘手,因为如果用户遗漏了一位数字,或者没有以前导0作为单数的前缀,它将会丢掉整个计算。出生日期输入的最佳(也是最流行的方式)是日期,月份和年份的3个下拉菜单。那么这将让你轻松工作的日期出一个javascript格式:

var date = new Date($('year').val(), $('month').val(), $('day').val()); 

alert(date.toDateString()); 

这将是从UX的角度更好,因为它不允许用户放在一个无效的日期,特别是对那些来自使用不同日期格式的语言环境的用户。

+0

是的,我正在读这篇文章,这是我的第一选择,但正如有人指出的,我倾向于同意 - 它向下滚动列表并选择三个不同的值而烦躁和烦人。每个人都可以很好地输入数字。我的计划是通过先在javascript中计算日期来验证日期,并随时更改DIV以显示他们正在输入的内容,然后快速仔细检查,以确认用户他们做得正确。 – Chud37 2012-08-02 11:08:52

+0

另一点,如果赞成这是用户不必猜测使用什么日期格式,并且没有地方混淆。特别是你使用的年份最后一年(因为DDMMYYYY和MMDDYYY都是常见的)。 – WhyNotHugo 2012-08-04 00:22:50

0

您需要使用一些图书馆,或代码的东西你自己,因为内置在JavaScript日期解析和编写例程非常有限。那里使用的格式基本上取决于系统。

我有点偏见(作为“Going Global with JavaScript and Globalize.js”的作者),但我仍然推荐使用Globalize.js,即使在你真的不是全球化但只使用英语符号的情况下。毕竟,在日期上使用英文标记是本地化的一种形式。

例子:

<script src=globalize.js></script> 
<script> 
var birthDateString = "09Feb1952"; // just a test case 
var birthDate = 
    Globalize.parseDate(birthDateString, 'ddMMMyyyy'); 
if(!birthDate) { 
    alert('Error in birth date!'); // replace by suitable error handling 
} 
else { 
    var unixTimeStamp = Math.round(birthDate.getTime()/1000); 
    document.write(unixTimeStamp + "<br>"); 
    document.write(Globalize.format(birthDate, 'dddd d MMM yyyy')); 
} 
</script> 

这将结束与结果“星期六1952年2月9日”,这是不完全的形式要求的,所以如果你真的想要的形式,你会需要一些额外的逻辑添加后缀“th”,“st”,“nd”或“rd”。

关于UNIX时间戳与JavaScript的Date对象,看到回答以下问题How do you get a timestamp in JavaScript?

0
function dateFromStr(input) { 
    var year, month, day; 

    year = parseInt(input.substr(4,4)); 
    month = parseInt(input.substr(2,2)); 
    day = parseInt(input.substr(0,2)); 

    return new Date(year, month, day); 
} 

dateFromStr("03082012"); 

缺点:有点冗长。 优点:对于像这样简单的事情,无需外部依赖。