我决定让用户输入 DDMMYYY 来获得他们的生日。如何根据该数据在 javascript 中创建 UNIX 时间戳?
另外,一旦我有了 unix 时间戳,如何用英文显示它,即 2000 年 1 月 5 日星期一?
我可以很容易地用 PHP 做到这一点,我只是不知道 javascript 中的函数。
我决定让用户输入 DDMMYYY 来获得他们的生日。如何根据该数据在 javascript 中创建 UNIX 时间戳?
另外,一旦我有了 unix 时间戳,如何用英文显示它,即 2000 年 1 月 5 日星期一?
我可以很容易地用 PHP 做到这一点,我只是不知道 javascript 中的函数。
这对于 的输入会很棘手DDMMYYYY
,因为如果用户遗漏了一个数字,或者没有在单数前面加上前导0
,它将导致整个计算失败。出生日期输入的最佳(也是最流行的方式)是日期、月份和年份的 3 个下拉菜单。这将允许您轻松地以 javascript 格式计算日期:
var date = new Date($('year').val(), $('month').val(), $('day').val());
alert(date.toDateString());
从用户体验的角度来看,这会更好,因为它不允许用户输入无效的日期,尤其是对于来自使用不同日期格式的语言环境的用户。
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");
缺点:有点冗长。优点:像这样简单的东西没有外部依赖。
使用moment.js很容易做到这一点。
var birthday = moment("10071986", "DDMMYYYY");
var unix = birthday.unix();
var humanized = birthday.format("dddd Do MMM YYYY");
这是一个工作的jsfiddle。http://jsfiddle.net/timrwood/rXArM/
你需要使用一些库,或者自己编写代码,因为 JavaScript 的内置日期解析和编写例程非常有限。那里使用的格式基本上取决于系统。
我有偏见(作为“使用 JavaScript 和 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>
这最终会得到结果“Saturday 9 Feb 1952”,这与请求的形式不完全一样,所以如果你真的想要那种形式,你需要一些添加后缀“th”、“st”、“ nd”或“rd”。
关于 UNIX 时间戳与 JavaScript Date 对象,请参阅如何在 JavaScript 中获取时间戳?
您可以使用子字符串获取日、月和年,然后在 javascript 中创建一个新的 Date 对象: var ux = new Date(year, month, day).getMilliseconds / 1000;