一篇文章吃透iOS、JS的时间日期(Date, Calendar, Locale, TimeZone)
iOS
时间相关类
- NSDate - 表示一个绝对的时间点。
- NSCalendar - 代表一个特定的日历,例如公历或者希伯来日历。它提供了一系列基于日期的计算,并且可以让你在"NSDate"和"NSDateComponents"对象之间进行转换。
- NSDateComponents - 允许你获取一个Date的特定内容,例如小时、分钟、年月日等等。
- NSTimeZone - 代表一个特定的时区信息,可以帮助跨时区的计算任务。
代码分析
废话少说,Show me the code
/**
* 日历
*/
//公历
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *date = [NSDate new];
NSLog(@"%ld-%ld-%ld",
[calendar component:NSCalendarUnitYear fromDate:date],
[calendar component:NSCalendarUnitMonth fromDate:date],
[calendar component:NSCalendarUnitDay fromDate:date]);
// 公历:2018-5-9
//佛历
calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierBuddhist];
NSLog(@"%ld-%ld-%ld",
[calendar component:NSCalendarUnitYear fromDate:date],
[calendar component:NSCalendarUnitMonth fromDate:date],
[calendar component:NSCalendarUnitDay fromDate:date]);
// 佛历:2561-5-9
//日本日历
calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierJapanese];
NSLog(@"%ld-%ld-%ld",
[calendar component:NSCalendarUnitYear fromDate:date],
[calendar component:NSCalendarUnitMonth fromDate:date],
[calendar component:NSCalendarUnitDay fromDate:date]);
// 日本日历:30-5-9
/**
* 地区
*/
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"Default Locale Formatted Date:%@", formattedDateString);
// 系统为公历:Default Locale Formatted Date:9 May 2018 at 4:25:06 PM GMT+8
// 系统为佛历:Default Locale Formatted Date:9 May 2561 BE at 4:21:29 PM GMT+8
//中国Locale
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"ZH Locale Formatted Date:%@", formattedDateString);
// ZH Locale Formatted Date:2018年5月9日 GMT+8 下午4:21:29
/**
* 时区
*/
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"GMT Timezone Formatted Date:%@", formattedDateString);
// GMT Timezone Formatted Date:2018年5月9日 GMT 上午8:21:29
/**
* NSDateComponents
*/
// Yearless date
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setMonth:11];
[components setDay:7];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *birthday = [gregorian dateFromComponents:components];
formattedDateString = [dateFormatter stringFromDate:birthday];
NSLog(@"GMT Timezone Formatted Date:%@", formattedDateString);
// GMT Timezone Formatted Date:1年11月6日 GMT 下午3:54:17
JavaScript
关于JavaScript的Date对象可以参考以下链接:
Understanding Date and Time in JavaScript
JavaScript Date Objects
获取Date属性
const birthday = new Date(1980, 6, 31);
birthday.getFullYear(); // 1980
birthday.getMonth(); // 6
birthday.getDate(); // 31
birthday.getDay(); // 4
birthday.getHours(); // 0
birthday.getMinutes(); // 0
birthday.getSeconds(); // 0
birthday.getMilliseconds(); // 0
birthday.getTime(); // 333849600000 (for GMT)
Date格式化
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today = new Date();
today.toLocaleDateString("en-US"); // 5/9/2018
today.toLocaleDateString("en-US",options); // Wednesday, May 9, 2018
today.toLocaleDateString("hi-IN", options); // बुधवार, 9 मई 2018
Moment.js
Moment.js -Parse, validate, manipulate, and display dates and times in JavaScript。Moment是一个非常强大的JavaScript时间日期库,是对原生对象的很好的扩展。
//Format
moment().format('MMMM Do YYYY, h:mm:ss a'); // May 9th 2018, 8:05:15 pm
//Calendar Time
moment().add(10, 'days').calendar();
//Multiple Locale Support
moment.locale(); // en
//TimeZone
var jun = moment("2014-06-01T12:00:00Z");
var dec = moment("2014-12-01T12:00:00Z");
jun.tz('America/Los_Angeles').format('ha z'); // 5am PDT
dec.tz('America/Los_Angeles').format('ha z'); // 4am PST
目前还有一个更新、更现代的时间日期库:luxon,可以尝试一下。
一篇文章吃透iOS、JS的时间日期(Date, Calendar, Locale, TimeZone)的更多相关文章
- 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?
壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...
- js 格式化时间日期函数小结
下面是脚本之家为大家整理的一些格式化时间日期的函数代码,需要的朋友可以参考下. 代码如下: Date.prototype.format = function(format){ var o = { &q ...
- 修改上一篇文章的node.js代码,支持调用自定义页面
上一篇文章所有请求只能调用index.html,现在做个改造,允许调用自定义页面 服务端 app.js var app = require('http').createServer(handler) ...
- 001 -js对时间日期的排序
001-JS对时间日期的排序 最近在做公司的项目时间,产品给了一个很简单的页面,让帮忙写一下.首先看一下产品的需求: 需要对该列表进行排序 思路:(1)可以在数据库写sql语句的时间直接一个DESC按 ...
- iOS - 获取当前时间日期星期几
//获取当前时间日期星期 - (NSString *)getCurrentTimeAndWeekDay { NSArray * arrWeek=[NSArray arrayWithObjects:@& ...
- js实现时间日期的格式化
前几天参加cvte的笔试,碰到了这样一道题目: //请写一个时间日期格式化的函数,具体要求如下: function format(date,"yyyy-mm-dd HH-mm-ss" ...
- js 格式化时间日期函数小结3
function DateUtil(){}/***功能:格式化时间*示例:DateUtil.Format("yyyy/MM/dd","Thu Nov 9 20:30:37 ...
- js 获取时间 new Date()详细介绍
javaScript系列:js中获取时间new Date()详细介绍 (2012-03-31 09:54:25) 转载▼ 标签: js时间 new date() 字符类型 转换 分类: study-j ...
- linux 关于时间日期date
一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" ...
随机推荐
- linux中常用压缩与解压命令
一. tar文件的解压 tar -xvf db.tar 二. zip文件的压缩与解压 压缩 zip -r dest_name.zip directory_to_compress 解压 unzip de ...
- Lenna图-莱娜·瑟德贝里
莱娜·瑟德贝里(瑞典文:Lena Soderberg),1951年3月31日出生于瑞典,在1972年11月期的<花花公子>杂志中,她化名为莱娜·舍布洛姆,成为了当期的玩伴女郎. 她的中间折 ...
- iOS --转载 NSRange 和 NSString 详解
一.NSRange 1.NSRange的介绍 NSRange是Foundation框架中比较常用的结构体, 它的定义如下: typedef struct _NSRange { NSUInteger l ...
- cocos3.9 windows平台 AssetsManager创建文件失败问题
在做热更新功能时用到了AssetsManager,发现在windows平台总是报CREATE_FILE错误,errorStr "Can't renamefile from: xxx.tmp ...
- win10下Import caffe时出现“ImportError: No module named google.protobuf.internal”的解决办法
解决方法:只要出现和protobuf相关的错误,只要在cmd中输入pip install protobuf,然后等待安装完成即可. ps:这时,可能会出现"pip 不是内部命令"之 ...
- std::stringstream(2)
stringstream本身的复制构造函数是私有的,无法直接用,于是带来了一些复杂的问题 网上,流传着几种办法,如streamA.str(streamB.str()),但这种办法,复制的仅仅是初始化时 ...
- JS制作一个通用的商城版历史浏览记录
正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) { var endst ...
- sql的case when then else end 的语法实现列转行
SELECT * FROM test5 ; RESOURCES DATETIME CNT ID1 0 2018-01-22 4 12 0 2018-01-24 10 23 0 2018-01-25 2 ...
- zookeeper 事务日志与快照日志
zookeeper日志各类日志简介 zookeeper服务器会产生三类日志:事务日志.快照日志和log4j日志. 在zookeeper默认配置文件zoo.cfg(可以修改文件名)中有一个配置项data ...
- tomcat的虚拟目录映射常用的几种方式
我们在项目部署的时候,可以采用多种方式,接下来我们将在实际中比较常用的几种方式总结如下. 1.可以直接将我们的项目丢到tomcat的webapps目录下,这样当tomcat重启的时候,我们就可以访 ...